PyQt / QListWidget: Come modificare i dati piuttosto che la visualizzazione del testo?
-
26-10-2019 - |
Domanda
Ho un dizionario di tuple: coppie nome. I Visualizzare i nomi in un QListWidget, ma a recuperare e lavorare con le tuple - i nomi sono rigorosamente per scopi di visualizzazione. La linea SetFlags nel seguente codice mi permette di modificare i nomi visualizzati, ma quello che in realtà voglio essere in grado di fare è modificare i dati tupla. Ho provato ad aggiungere il bit Qt.EditRole, ma finito con nulla, ma righe vuote nel QListWidget per la mia angoscia. Come posso lasciare all'utente di modificare i dati tupla (tramite interfaccia utente) e poi avere la mia richiesta del codice del dizionario per aggiornare il nome visualizzato?
for tuple in tuples:
name = dict[tuple]
this_item = QListWidgetItem(name)
this_item.setData(Qt.UserRole,tuple)
# this_item.setData(Qt.EditRole, tuple)
this_item.setFlags(this_item.flags() | Qt.ItemIsEditable)
self.addItem(this_item)
Soluzione
Per modificare i dati dietro il nome, aggiungerò un metodo nel mio QListWidget che crea un ambiente di editing personalizzato:
def edit_items(self):
dialog = MyQDialog(self.parent())
table = QTableWidget(self.count(),2,dialog)
for row in range(0, self.count()):
spec = repr(self.item(row).data(32).toPyObject())
name = self.item(row).text()
spec_item = QTableWidgetItem(spec)
name_item = QTableWidgetItem(name)
table.setItem(row,0,name_item)
table.setItem(row,1,spec_item)
layout = QHBoxLayout()
layout.addStrut(550)
layout.addWidget(table)
dialog.setLayout(layout)
dialog.show()
e poi andare da lì.