Ich habe ein QTableWidget, das ich arbeite, das Zeilen dynamisch mit Comboboxen auf bestimmten Zellen hinzufügen soll, wenn der Benutzer eine Schaltfläche mit dem Namen Add Cases trifft. Ich habe die wichtigsten Teile funktioniert, aber das Problem, das ich habe, versucht, den Text aus der Combobox zu bekommen. Im folgenden Code habe ich eine Funktion namens def clearcases() als Dummy-Funktion zum Testen. Ich verstehe, dass, wenn ich eine Zeile hinzufüge, die Referenzen der vorherigen Zeilen gelöscht werden, weshalb ich nicht darauf zugreifen kann, also habe ich versucht, eine Liste zu erstellen, die alle Combobox-Objekte verfolgt.QTableWidget dynamische Zeilen w/QComboBox
Ich erhalte diesen Fehler mit dem aktuellen Code
Fehler:
Traceback (most recent call last):
File "C:\Users\Desktop\VLS.py", line 3888 in clearcases
print(TotalLift[0].currentText()
RuntimeError: wrapped C/C++ object of type QComboBox has been deleted
TotalLift = []
LiftBox = {}
TotalReed = []
ReedBox = {}
def addcases(self):
row = self.tableWidget.rowCount()
self.tableWidget.insertRow(row)
for x in range(1, 33):
self.tableWidget.setVerticalHeaderItem(row, QTableWidgetItem('Case ' + chr(ord('A') + row)))
for i in range(0, 4):
LiftBox[i] = QtWidgets.QComboBox()
Lift = ['', 'N', 'M', 'H']
LiftBox[i].addItems(Lift)
TotalLift.append(LiftBox[i])
ReedBox[i] = QtWidgets.QComboBox()
Reed = ['', 'B', 'C', 'D', 'E', 'O', 'P']
ReedBox[i].addItems(Reed)
self.tableWidget.setCellWidget(row, 2, ReedBox[0])
self.tableWidget.setCellWidget(row, 3, LiftBox[0])
self.tableWidget.setCellWidget(row, 4, ReedBox[1])
self.tableWidget.setCellWidget(row, 5, LiftBox[1])
self.tableWidget.setCellWidget(row, 6, ReedBox[2])
self.tableWidget.setCellWidget(row, 7, LiftBox[2])
self.tableWidget.setCellWidget(row, 8, ReedBox[3])
self.tableWidget.setCellWidget(row, 9, LiftBox[3])
def clearcases(self):
print(TotalLift[0].currentText())
Mein Gesamt Frage ist, wie bekomme ich den Text aus bestimmten QComboBoxes, wenn Reihen sind hinzugefügt?
FYI, die Clearcases-Funktion ist mit der Schaltfläche "Clear Case" verbunden. Wenn ich also auf die Schaltfläche klicke, möchte ich, dass der erste Zeile (Case A) Lift0-Text an die Konsole gedruckt wird.
Lauf Beispiel:
https://drive.google.com/drive/folders/0BzcHlfStubD3cHpUTkttN3h4NDA?usp=sharing