Как отобразить номер индекса в QListView?

#python #pyqt #pyqt5

Вопрос:

У меня есть ListView и перебор словаря. Я хочу отобразить номер индекса для каждой строки в представлении.

 model = QtGui.QStandardItemModel()
self.listView.setModel(model)

results = {'D2_SMI_1': True, 'D2_SMI_2': False}

for key, value in results.items():
    item = QStandardItem(key)
    item.setCheckable(True)
    item.setCheckState(value)
    model.appendRow(item)
 

введите описание изображения здесь

Комментарии:

1. Не могли бы вы подробно объяснить, что вы хотите получить? Где должен отображаться индекс?

2. Номер индекса должен быть помещен перед названием элемента, например . 1. D2_SMI_1 [✓]

3. Примечание: Я удалил второй вопрос, так как в этом случае вы должны создать один вопрос для каждого сообщения, поэтому вы должны создать новое сообщение для этого вопроса

4. О, конечно. Спасибо!

Ответ №1:

Возможное решение состоит в том, чтобы добавить номер через делегата:

 import sys

from PyQt5.QtGui import QStandardItem, QStandardItemModel
from PyQt5.QtWidgets import QApplication, QListView, QStyledItemDelegate


class Delegate(QStyledItemDelegate):
    def initStyleOption(self, option, index):
        super().initStyleOption(option, index)
        option.text = f"{index.row()   1}. {option.text}"


def main():
    app = QApplication(sys.argv)

    model = QStandardItemModel()

    for text in ("D2_SMI_1", "D2_SMI_2", "D2_SMI_3", "D2_SMI_4"):
        item = QStandardItem(text)
        model.appendRow(item)

    view = QListView()
    view.setModel(model)
    view.resize(640, 480)
    view.show()

    delegate = Delegate(view)
    view.setItemDelegate(delegate)

    ret = app.exec_()
    sys.exit(ret)


if __name__ == "__main__":
    main()