Шаг 141.
Библиотека PyQt5.
Списки и таблицы. Модели. Класс QStandardItemModel

    На этом шаге мы рассмотрим назначение, пример и основные методы этого класса.

    Класс QStandardItemModel из модуля QtGui реализует двумерную (таблица) и иерархическую модели. Каждый элемент такой модели представлен классом QStandardItem из того же модуля. Вывести на экран ее содержимое можно с помощью классов QTableView, QTreeView и др., передав модель в метод setModel() представления. Иерархия наследования:

  QObject - QAbstractItemModel - QStandardItemModel

    Форматы конструктора класса QStandardItemModel:

  <Объект> = QStandardItemModel ([parent=None])
  <Объект> = QStandardItemModel (<Количество строк>, <Количество столбцов>
          [, parent=None])

    Пример создания и вывода на экран таблицы из трех столбцов; значка, названия языка программирования и адреса Web-сайта:

# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets, QtGui
import sys
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget()
window.setWindowTitle("QStandardItemModel")

sti = QtGui.QStandardItemModel(parent=window)
lst1 = ['Perl', 'PHP', 'Python', 'Ruby']
lst2 = ['http://www.perl.org/', 'http://php.net/',
        'https://www.python.org/', 'https://www.ruby-lang.org/']

tv = QtWidgets.QTableView()
for row in range(0, 4):
    if row == 2:
        iconfile = 'python.png'
    else:
        iconfile = 'icon.png'
    item1 = QtGui.QStandardItem(QtGui.QIcon(iconfile), '')
    item2 = QtGui.QStandardItem(lst1[row])
    item3 = QtGui.QStandardItem(lst2[row])
    sti.appendRow([item1, item2, item3])
sti.setHorizontalHeaderLabels(['Значок', 'Название', 'Сайт'])
tv.setModel(sti)
tv.setColumnWidth(0, 50)
tv.setColumnWidth(2, 180)

vbox = QtWidgets.QVBoxLayout()
vbox.addWidget(tv)
window.setLayout(vbox)
window.resize(400,200)
window.show()
sys.exit(app.exec_())
Архив с файлами можно взять здесь.


Рис.1. Результат работы приложения

    Класс QStandardItemModel поддерживает следующие основные методы (полный их список доступен на странице https://doc.qt.io/qt-5/qstandarditemmodel.html):

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг