ich habe eine Destopanwendung in Python 3.6 mit PyQt5 und QTableWidget programmiert.
In meiner QTableWidget -Tabelle sollen zuvor generierte Daten dargestellt (in meinem Code habe ich diese jetzt zur Veranschaulichung direkt eingegeben) werden. Der Nutzer soll weitere Anpassungen an der Tabelle vornehmen können und das Ergebnis (die QTableWidget-Tabelle) anschließend ausdrucken können. Leider erhalte ich sobald auf das Drucksymbol oder auch Druckvorschau gedrückt wird
Code: Alles auswählen
Process finished with exit code -1073740791 (0xC0000409)
Hier mein Code, ich würde mich sehr freuen, wenn mir jemand von euch helfen kann.
Code: Alles auswählen
from PyQt5 import QtWidgets, QtCore, QtPrintSupport, QtGui
from PyQt5.QtWidgets import QTableWidgetItem
import sys
from PyQt5.QtWidgets import *
list_a =['word_a 1', 'word_a 2']
list_b =['word_b 1 ', 'word_b 2']
list_c =['word_c 1', 'word_c 2']
combo_box_options = ["Option 1","Option 2","Option 3"]
list_d = ['gut','schlecht']
data = {'Wort A':list_a, 'Wort B':list_b, 'Wort C': list_c, 'Dropdown': [], 'Word D': list_d}
class Window(QTabWidget):
def __init__(self):
QtWidgets.QWidget.__init__(self)
super().__init__()
self.setWindowTitle(self.tr('Document Printer'))
self.table = QtWidgets.QTableWidget()
self.table.setRowCount(5)
self.table.setColumnCount(5)
horHeaders = []
for col, key in enumerate(sorted(data.keys())):
horHeaders.append(key)
for row, item in enumerate(data[key]):
newitem = QTableWidgetItem(item)
newitem.setTextAlignment(QtCore.Qt.AlignCenter)
self.table.setItem(row, col, newitem)
# print(newitem.text())
# print(horHeaders)
combo_attr = ['Schlechtes Wort', 'Gefällt niemand', 'Sehr gut', 'Löschen']
i = 0
for j in horHeaders:
comboBox = QtWidgets.QComboBox()
for t in combo_attr:
comboBox.addItem(t)
self.table.setCellWidget(i,3,comboBox)
i += 1
self.table.setHorizontalHeaderLabels(
'Wort A|Wort B|Wort C|Dropdown|Wort D'.split('|'))
self.buttonPrint = QtWidgets.QPushButton('Print', self)
self.buttonPrint.clicked.connect(self.handlePrint)
self.buttonPreview = QtWidgets.QPushButton('Preview', self)
self.buttonPreview.clicked.connect(self.handlePreview)
layout = QtWidgets.QGridLayout(self)
layout.addWidget(self.table, 0, 0, 1, 2)
layout.addWidget(self.buttonPrint, 1, 0)
layout.addWidget(self.buttonPreview, 1, 1)
def handlePrint(self):
dialog = QtPrintSupport.QPrintDialog()
if dialog.exec_() == QtWidgets.QDialog.Accepted:
self.handlePaintRequest(dialog.printer())
def handlePreview(self):
dialog = QtPrintSupport.QPrintPreviewDialog()
dialog.paintRequested.connect(self.handlePaintRequest)
dialog.exec_()
def handlePaintRequest(self, printer):
document = QtGui.QTextDocument()
cursor = QtGui.QTextCursor(document)
table = cursor.insertTable(
self.table.rowCount(), self.table.columnCount())
for row in range(table.rows()):
print(row)
for col in range(table.columns()):
print(col)
cursor.insertText(self.table.newitem(row, col).text())
cursor.movePosition(QtGui.QTextCursor.NextCell)
document.print_(printer)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = Window()
window.resize(640, 480)
window.show()
sys.exit(app.exec_())