PyQt / QListWidget: Come modificare i dati piuttosto che la visualizzazione del testo?

StackOverflow https://stackoverflow.com/questions/8337877

  •  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)
È stato utile?

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ì.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top