PyQt / QListWidget: как редактировать данные, а не отображать текст? - PullRequest
0 голосов
/ 01 декабря 2011

У меня есть словарь пар кортеж: имя.Я отображаю имена в QListWidget, но извлекаю и работаю с кортежами - имена предназначены исключительно для отображения.Строка setFlags в приведенном ниже коде позволяет мне редактировать отображаемые имена, но на самом деле я хочу редактировать данные кортежей.Я попытался добавить бит Qt.EditRole, но в результате у меня не осталось ничего, кроме пустых строк в QListWidget.Как я могу позволить пользователю редактировать данные кортежа (через пользовательский интерфейс), а затем сделать мой код запрашивающим словарь для обновления отображаемого имени?

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)

1 Ответ

0 голосов
/ 02 декабря 2011

Чтобы редактировать данные за именем, я добавлю метод в свой 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()

и затем оттуда.

...