PyQt / QListWidget: comment modifier des données plutôt que du texte d'affichage?

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

  •  26-10-2019
  •  | 
  •  

Question

J'ai un dictionnaire de tuple: paires nom. J'affiche les noms dans un QListWidget, mais je récupérer et travailler avec les tuples - les noms sont strictement à des fins d'affichage. La ligne de setFlags dans le code ci-dessous me permet d'éditer les noms d'affichage, mais ce que je veux vraiment être en mesure de faire est de modifier les données de tuple. J'ai essayé d'ajouter le bit Qt.EditRole, mais a fini avec rien d'autre que des lignes vides dans le QListWidget pour ma peine. Comment puis-je laisser l'utilisateur de modifier les données de tuple (via l'interface utilisateur) et ensuite mon code requête le dictionnaire de mettre à jour le nom d'affichage?

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)
Était-ce utile?

La solution

Pour modifier les données derrière le nom, je vais ajouter une méthode dans mon QListWidget qui crée un environnement d'édition personnalisé:

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()

et puis à partir de là.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top