J'ai un QTableWidget sur lequel je travaille qui est supposé ajouter dynamiquement des lignes avec des comboboxes sur certaines cellules, chaque fois que l'utilisateur appuie sur un bouton appelé Add Cases. J'ai les parties principales fonctionnantes, mais le problème que j'ai est d'essayer d'obtenir le texte de la liste déroulante. Dans le code suivant, j'ai une fonction appelée def clearcases() comme une fonction fictive pour le test. Je comprends que chaque fois que j'ajoute une ligne, les références des lignes précédentes sont supprimées, c'est pourquoi je ne peux pas y accéder, j'ai donc essayé de créer une liste qui gardera une trace de tous les objets de la liste déroulante.QTableWidget lignes dynamiques w/QComboBox
Je reçois cette erreur avec le code actuel
Erreur:
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())
Ma question générale est, comment puis-je obtenir le texte de certaines QComboBoxes chaque fois que lignes sont ajoutés? Pour info, la fonction clearcases est connectée au bouton Clear Case, donc chaque fois que je clique sur le bouton, je veux imprimer le 1er texte (Case A) Lift0 vers la console.
exemple Exécution:
https://drive.google.com/drive/folders/0BzcHlfStubD3cHpUTkttN3h4NDA?usp=sharing