Шаг 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):
 -  setRowCount (<Количество строк>) - задает количество строк;
 
 -  setColumnCount (<Количество столбцов>) - задает количество столбцов;
 
 -  rowCount ([parent=QModelIndex()]) - возвращает количество  строк.  Необязательный параметр parent указывает элемент верхнего уровня, при этом будет возвращено количество 
вложенных в этот элемент строк, - если параметр не задан, будет возвращено количество строк верхнего уровня иерархии;
 
 -  columnCount ([parent=QModelIndex()]) - возвращает  количество   столбцов.   Необязательный параметр parent в этом случае не используется;
 
 -  setItem (<Cтрока>, <Столбец>, <QStandardItem>) - устанавливает элемент в указанную ячейку;
 
 -  appendRow (<Список>) - добавляет одну строку в конец модели. В качестве параметра указывается  список  экземпляров  класса QStandardItem,  
представляющих отдельные столбцы добавляемой строки;
 
 -  appendRow (<QStandardItem>) - добавляет строку из одной колонки в конец модели;
 
 -  appendColumn (<Список>) - добавляет один столбец в конец модели. В качестве параметра указывается список экземпляров класса QStandardItem, представляющих 
отдельные строки добавляемого столбца;
 
 -  insertRow (<Индекс строки>, <Список>) - добавляет одну строку в указанную позицию модели.   В   качестве   параметра <Список> указывается   
список   экземпляров   класса QStandardItem, представляющих отдельные столбцы добавляемой строки;
 
 -  insertRow (<Индекс>[, parent=QModelIndex()]) - добавляет одну пустую строку в указанную позицию модели. Необязательный параметр parent указывает элемент верхнего 
уровня, в который будет вложена добавляемая строка, - если параметр не задан, строка будет добавлена на самый верхний уровень иерархии. Метод возвращает значение True, если операция успешно выполнена;
 
 -  insertRow (<Индекс строки>, <QStandardItem>) - добавляет строку из одного столбца в указанную позицию модели;
 
 -  insertRows (<Индекс>, <Количество>[, parent=QModelIndex()]) - добавляет несколько пустых строк в указанную позицию модели. Необязательный параметр parent указывает 
элемент верхнего уровня, в который будут вложены добавляемые строки, - если параметр не задан, строки будут добавлены на самый верхний уровень иерархии. Метод возвращает значение True, если операция успешно выполнена;
 
 -  insertColumn (<Индекс столбца>, <Список>) - добавляет один столбец в указанную позицию модели. В качестве параметра <Список> указывается список 
экземпляров класса QStandardItem, представляющих отдельные строки добавляемого столбца;
 
 -  insertColumn (<Индекс>[, parent=QModelIndex()]) - добавляет один пустой столбец в указанную позицию. Необязательный параметр parent указывает элемент верхнего 
уровня - владелец элементов, в который будет добавлен столбец. Если этот параметр не задан, столбец будет добавлен в элементы самого верхнего уровня иерархии. Метод возвращает значение True, если операция выполнена успешно;
 
 -  insertColumns (<Индекс>, <Количество>[, parent=QModelIndex()]) - добавляет несколько пустых столбцов в указанную позицию. Необязательный параметр parent указывает 
элемент верхнего уровня - владелец элементов, в который будут добавлены столбцы. Если этот параметр не задан, столбцы будут добавлены в элементы самого верхнего уровня иерархии. Метод возвращает значение True, если операция успешно выполнена;
 
 -  removeRows (<Индекс>, <Количество>[, parent=QModelIndex()]) - удаляет указанное количество строк, начиная со строки, имеющей индекс <Индекс>. Необязательный параметр parent 
указывает элемент верхнего уровня - владелец удаляемых строк. Если этот параметр не задан, будут удалены строки из самого верхнего уровня иерархии. Метод возвращает значение True, если операция успешно выполнена;
 
 -  removeColumns (<Индекс>, <Количество>[, parent=QModelIndex()]) - удаляет указанное количество столбцов, начиная со столбца, имеющего индекс <Индекс>. Необязательный 
параметр parent указывает элемент верхнего уровня - владелец элементов, из которых будут удалены столбцы, - если этот параметр не задан, будут удалены столбцы из элементов самого верхнего уровня иерархии. Метод возвращает значение True, если операция успешно выполнена;
 
 -  takeItem (<Строка>[, <Столбец>=0]) - удаляет указанный элемент из модели и возвращает его в виде экземпляра класса QStandardItem;
 
 -  takeRow (<Индекс>) - удаляет указанную строку из модели и возвращает ее в виде списка экземпляров класса QStandardItem;
 
 -  takeColumn (<Индекс>) - удаляет указанный столбец из модели и возвращает его в виде списка экземпляров класса QStandardItem.
 
   
На следующем шаге мы закончим изучение этого вопроса.
Предыдущий шаг 
 
Содержание 
 
Следующий шаг