Pyqt/Qlistwidget: Как редактировать данные, а не отображать текст?
-
26-10-2019 - |
Вопрос
У меня есть словарь Tuple: имени пары. Я отображаю имена в Qlistwidget, но я получаю и работаю с кортежами - имена строго для целей отображения. Строка SetFlags в коде ниже позволяет мне редактировать имена дисплеев, но я действительно хочу иметь возможность отредактировать данные кортежа. Я попытался добавить бит QT.Editrole, но в итоге не было ничего, кроме чистых линий в QlistWidget для моей проблемы. Как я могу позволить пользователю редактировать данные Tuple (через пользовательский интерфейс), а затем попросить кодовой запрос словаря для обновления отображаемого имени?
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)
Решение
Чтобы редактировать данные за именем, я добавлю метод в свой QListWidget, который создает пользовательскую среду редактирования:
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()
А потом иди оттуда.