Шаг 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.
На следующем шаге мы закончим изучение этого вопроса.
Предыдущий шаг
Содержание
Следующий шаг