Главная страница

ээдд. Прохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен. Николай Прохоренок Владимир Дронов


Скачать 7.92 Mb.
НазваниеНиколай Прохоренок Владимир Дронов
Дата05.05.2023
Размер7.92 Mb.
Формат файлаpdf
Имя файлаПрохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен.pdf
ТипДокументы
#1111379
страница48 из 83
1   ...   44   45   46   47   48   49   50   51   ...   83
QStandardItem
;
 clear()
удаляет все элементы из модели;
 item(<Строка>[, <Столбец>=0])
— возвращает ссылку на элемент (экземпляр класса
QStandardItem
), расположенный в указанной ячейке;
 invisibleRootItem()
— возвращает ссылку на невидимый корневой элемент модели в виде экземпляра класса
QStandardItem
;
 itemFromIndex()
— возвращает ссылку на элемент (экземпляр класса
QStandardItem
), на который ссылается заданный индекс;
 index(<Строка>, <Столбец>[, parent=QModelIndex()])
— возвращает индекс элемента
(экземпляр класса
QModelIndex
), расположенного в указанной ячейке. Необязательный параметр parent задает элемент верхнего уровня для искомого элемента. Если таковой не задан, будет выполнен поиск элемента на самом верхнем уровне иерархии;
 indexFromItem()
— возвращает индекс элемента (экземпляр класса
QModelIndex
), ссылка на который передана в качестве параметра;
 setData(, <Значение>[, role=EditRole])
— задает значение для роли role элемента, на который указывает индекс

. Метод возвращает значение
True
, если операция успешно выполнена;
 data([, role=DisplayRole])
— возвращает данные, относящиеся к ука- занной роли элемента, на который ссылается индекс

;
 setHorizontalHeaderLabels(<Список строк>)
— задает заголовки столбцов. В качестве параметра указывается список строк;
 setVerticalHeaderLabels(<Список строк>)
— задает заголовки строк. В качестве пара- метра указывается список строк;

Глава 22. Списки и таблицы
509
 setHorizontalHeaderItem(<Индекс>, )
— задает заголовок столбца. В пер- вом параметре указывается индекс столбца, а во втором
— экземпляр класса
QStandardItem
;
 setVerticalHeaderItem(<Индекс>, )
— задает заголовок строки. В пер- вом параметре указывается индекс строки, а во втором — экземпляр класса
QStandardItem
;
 horizontalHeaderItem(<Индекс>)
— возвращает ссылку на указанный заголовок столбца
(экземпляр класса
QStandardItem
);
 verticalHeaderItem(<Индекс>)
— возвращает ссылку на указанный заголовок строки
(экземпляр класса
QStandardItem
);
 setHeaderData(<Индекс>, <Ориентация>, <Значение>[, role=EditRole])
— задает зна- чение для указанной роли заголовка. В первом параметре указывается индекс строки или столбца, а во втором — ориентация (атрибут
Horizontal или
Vertical класса
QtCore.Qt
).
Метод возвращает значение
True
, если операция успешно выполнена;
 headerData(<Индекс>, <Ориентация>[, role=DisplayRole])
— возвращает значение, со- ответствующее указанной роли заголовка. В первом параметре указывается индекс стро- ки или столбца, а во втором — ориентация;
 findItems(<Текст>[, flags=MatchExactly][, column=0])
— производит поиск элемента внутри модели в указанном в параметре column столбце по заданному тексту. Допусти- мые значения параметра flags мы рассматривали в разд. 22.1.3. В качестве значения метод возвращает список экземпляров класса
QStandardItem или пустой список;
 sort(<Индекс столбца>[, order=AscendingOrder])
— производит сортировку. Если во втором параметре указан атрибут
AscendingOrder класса
QtCore.Qt
, сортировка произво- дится в прямом порядке, а если
DescendingOrder
— в обратном;
 setSortRole(<Роль>)
— задает роль (см. разд. 22.3), по которой производится сортировка;
 parent()
— возвращает индекс (экземпляр класса
QModelIndex
) родитель- ского элемента. В качестве параметра указывается индекс (экземпляр класса
QModelIndex
) элемента-потомка;
 hasChildren([parent=QModelIndex()])
— возвращает
True
, если заданный элемент имеет хотя бы одного потомка, и
False
— в противном случае.
При изменении значения элемента генерируется сигнал itemChanged()
Внутри обработчика через параметр доступна ссылка на элемент, представленный экземп- ляром класса
QStandardItem
22.4.4. Класс QStandardItem
Каждый элемент модели
QStandardItemModel представлен классом
QStandardItem из модуля
QtGui
. Этот класс не только описывает элемент, но и позволяет создавать вложенные струк- туры, в которых любой элемент может иметь произвольное количество вложенных в него дочерних элементов или элементов-потомков (что пригодится при выводе иерархического списка). Форматы конструктора класса:
<Объект> = QStandardItem()
<Объект> = QStandardItem(<Текст>)

510
Часть II. Библиотека PyQt 5
<Объект> = QStandardItem(, <Текст>)
<Объект> = QStandardItem(<Количество строк>[, <Количество столбцов>=1])
Последний формат задает количество дочерних элементов и столбцов в них.
Наиболее часто используемые методы класса
QStandardItem приведены далее (полный их список можно найти на странице https://doc.qt.io/qt-5/qstandarditem.html):
 setRowCount(<Количество строк>)
— задает количество дочерних строк;
 setColumnCount(<Количество столбцов>)
— задает количество столбцов в дочерних строках;
 rowCount()
— возвращает количество дочерних строк;
 columnCount()
— возвращает количество столбцов в дочерних строках;
 row()
— возвращает индекс строки в дочерней таблице родительского элемента или зна- чение
-1
, если элемент не содержит родителя (находится на самом верхнем уровне иерархии);
 column()
— возвращает индекс столбца в дочерней таблице родительского элемента или значение
-1
, если элемент не содержит родителя;
 setChild(<Строка>, <Столбец>, )
— устанавливает заданный третьим параметром элемент в указанную ячейку дочерней таблицы текущего элемента.
Пример создания иерархии и вывода ее на экран с применением иерархического списка показан в листинге 22.2.
Листинг 22.2. Вывод иерархического списка
# -*- coding: utf-8 -*- from PyQt5 import QtGui, QtWidgets import sys app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QWidget() window.setWindowTitle("QStandardItemModel") tv = QtWidgets.QTreeView(parent=window) sti = QtGui.QStandardItemModel(parent=window) rootitem1 = QtGui.QStandardItem('QAbstractItemView') rootitem2 = QtGui.QStandardItem('Базовый класс') item1 = QtGui.QStandardItem('QListView') item2 = QtGui.QStandardItem('Список') rootitem1.appendRow([item1, item2]) item1 = QtGui.QStandardItem('QTableView') item2 = QtGui.QStandardItem('Таблица') rootitem1.appendRow([item1, item2]) item1 = QtGui.QStandardItem('QTreeView') item2 = QtGui.QStandardItem('Иерархический список') rootitem1.appendRow([item1, item2]) sti.appendRow([rootitem1, rootitem2]) sti.setHorizontalHeaderLabels(['Класс', 'Описание']) tv.setModel(sti) tv.setColumnWidth(0, 170)

Глава 22. Списки и таблицы
511 tv.resize(400, 100) window.show() sys.exit(app.exec_())
 appendRow(<Список>)
— добавляет одну строку в конец дочерней таблицы текущего эле- мента. В качестве параметра указывается список экземпляров класса
QStandardItem
, формирующих отдельные столбцы;
 appendRow()
— добавляет заданный элемент в конец дочерней таблицы текущего элемента, формируя строку с одним столбцом;
 appendRows(<Список>)
— добавляет несколько строк, содержащих по одному столбцу, в конец дочерней таблицы текущего элемента. В качестве параметра указывается список экземпляров класса
QStandardItem
;
 appendColumn(<Список>)
— добавляет один столбец в конец дочерней таблицы текущего элемента. В качестве параметра указывается список экземпляров класса
QStandardItem
, формирующих отдельные строки;
 insertRow(<Индекс строки>, <Список>)
— вставляет одну строку в указанную позицию дочерней таблицы у текущего элемента. В качестве параметра
<Список>
указывается список экземпляров класса
QStandardItem
, формирующих отдельные столбцы;
 insertRow(<Индекс строки>, )
— вставляет заданный элемент в указан- ную позицию дочерней таблицы у текущего элемента, формируя строку с одним столб- цом;
 insertRows(<Индекс строки>, <Список>)
— вставляет несколько строк, содержащих по одному столбцу, в указанную позицию дочерней таблицы у текущего элемента. В каче- стве параметра
<Список>
указывается список экземпляров класса
QStandardItem
;
 insertRows(<Индекс строки>, <Количество>)
— вставляет несколько пустых строк в ука- занную позицию дочерней таблицы для текущего элемента;
 insertColumn(<Индекс столбца>, <Список>)
— вставляет один столбец в указанную по- зицию дочерней таблицы у текущего элемента. В качестве параметра
<Список>
указыва- ется список экземпляров класса
QStandardItem
, формирующих отдельные строки;
 insertColumns(<Индекс>, <Количество>)
— вставляет несколько пустых столбцов в ука- занную позицию дочерней таблицы у текущего элемента;
 removeRow(<Индекс>)
— удаляет строку с указанным индексом;
 removeRows(<Индекс>, <Количество>)
— удаляет указанное количество строк, начиная со строки, имеющей индекс
<Индекс>
;
 removeColumn(<Индекс>)
— удаляет столбец с указанным индексом;
 removeColumns(<Индекс>, <Количество>)
— удаляет указанное количество столбцов, начиная со столбца, имеющего индекс
<Индекс>
;
 takeChild(<Строка>[, <Столбец>=0])
— удаляет указанный дочерний элемент и возвра- щает его в виде экземпляра класса
QStandardItem
;
 takeRow(<Индекс>)
— удаляет указанную строку из дочерней таблицы и возвращает ее в виде списка экземпляров класса
QStandardItem
;
 takeColumn(<Индекс>)
— удаляет указанный столбец из дочерней таблицы и возвращает его в виде списка экземпляров класса
QStandardItem
;

512
Часть II. Библиотека PyQt 5
 parent()
— возвращает ссылку на родительский элемент (экземпляр класса
QStandardItem
) или значение
None
, если текущий элемент не имеет родителя;
 child(<Строка>[, <Столбец>=0])
— возвращает ссылку на дочерний элемент (экземпляр класса
QStandardItem
) или значение
None
, если такового нет;
 hasChildren()
— возвращает значение
True
, если существует хотя бы один дочерний элемент, и
False
— в противном случае;
 setData(<Значение>[, role=UserRole+1])
— устанавливает значение для указанной роли;
 data([UserRole+1])
— возвращает значение, которое соответствует роли, указанной в параметре;
 setText(<Текст>)
— задает текст элемента;
 text()
— возвращает текст элемента;
 setTextAlignment(<Выравнивание>)
— задает выравнивание текста внутри элемента;
 setIcon()
— задает значок, который будет отображен перед текстом;
 setToolTip(<Текст>)
задает текст всплывающей подсказки;
 setWhatsThis(<Текст>)
— задает текст для справки;
 setFont()
— задает шрифт элемента;
 setBackground()
— задает цвет фона;
 setForeground()
— задает цвет текста;
 setCheckable(<Флаг>)
— если в качестве параметра указано значение
True
, после текста элемента будет выведен флажок, который можно устанавливать и сбрасывать;
 isCheckable()
— возвращает значение
True
, если после текста элемента выводится фла- жок, и
False
— в противном случае;
 setCheckState(<Статус>)
— задает состояние флажка. Могут быть указаны следующие атрибуты класса
QtCore.Qt
:

Unchecked

0
— флажок сброшен;

PartiallyChecked

1
— флажок находится в неопределенном состоянии;

Checked

2
— флажок установлен;
 checkState()
— возвращает текущее состояние флажка;
 setTristate(<Флаг>)
— если в качестве параметра указано значение
True
, флажок может иметь три состояния: установленное, сброшенное и неопределенное (промежуточное);
 isTristate()
— возвращает значение
True
, если флажок может иметь три состояния, и
False
— в противном случае;
 setFlags(<Флаги>)
— задает свойства элемента (см. разд. 22.4.1);
 flags()
— возвращает значение установленных свойств элемента;
 setSelectable(<Флаг>)
— если в качестве параметра указано значение
True
, пользова- тель может выделить элемент;
 setEditable(<Флаг>)
— если в качестве параметра указано значение
True
, пользователь может редактировать текст элемента;
 setDragEnabled(<Флаг>)
— если в качестве параметра указано значение
True
, перетаски- вание элемента разрешено;

Глава 22. Списки и таблицы
513
 setDropEnabled(<Флаг>)
— если в качестве параметра указано значение
True
, сброс дан- ных в элемент разрешен;
 setEnabled(<Флаг>)
— если в качестве параметра указано значение
True
, пользователь может взаимодействовать с элементом. Значение
False делает элемент недоступным;
 clone()
— возвращает копию элемента в виде экземпляра класса
QStandardItem
;
 index()
— возвращает индекс элемента (экземпляр класса
QModelIndex
);
 model()
— возвращает ссылку на модель (экземпляр класса
QStandardItemModel
);
 sortChildren(<Индекс столбца>[, order=AscendingOrder])
— производит сортировку дочерней таблицы. Если во втором параметре указан атрибут
AscendingOrder класса
QtCore.Qt
, сортировка производится в прямом порядке, а если
DescendingOrder
— в об- ратном.
22.5. Представления
Для отображения элементов модели предназначены следующие классы представлений:

QListView
— реализует простой список с возможностью выбора как одного, так и не- скольких пунктов. Пункты списка, помимо текстовой надписи, могут содержать значки;

QTableView
— реализует таблицу;

QTreeView
— реализует иерархический список.
Также можно воспользоваться классами
QComboBox
(раскрывающийся список — см. разд. 22.1),
QListWidget
(простой список),
QTableWidget
(таблица) и
QTreeWidget
(иерархический спи- сок). Последние три класса нарушают концепцию «модель-представление», хотя и отчасти базируются на ней. За подробной информацией по этим классам обращайтесь к докумен- тации.
22.5.1. Класс QAbstractItemView
Абстрактный класс
QAbstractItemView является базовым классом для всех рассмотренных ранее представлений. Иерархия наследования выглядит так:
(QObject, QPaintDevice) — QWidget — QFrame — QAbstractScrollArea — QAbstractItemView
Класс
QAbstractItemView поддерживает такой набор полезных для нас методов (полный их список можно найти на странице https://doc.qt.io/qt-5/qabstractitemview.html):
 setModel()
— задает для представления модель. В качестве пара- метра передается экземпляр одного из классов, порожденных от класса
QAbstractItemModel
;
 model()
— возвращает заданную для представления модель;
 selectedIndexes()
— возвращает выделенные в списке элементы, представленные спи- ском экземпляров класса
QModelIndex
;
 setCurrentIndex()
— делает элемент с указанным индексом (экземпляр класса
QModelIndex
) текущим. Метод является слотом;
 currentIndex()
— возвращает индекс (экземпляр класса
QModelIndex
) текущего элемента;
 setRootIndex()
— задает корневой элемент. В качестве параметра указы- вается экземпляр класса
QModelIndex
. Метод является слотом;

514
Часть II. Библиотека PyQt 5
 rootIndex()
— возвращает индекс (экземпляр класса
QModelIndex
) корневого элемента;
 setAlternatingRowColors(<Флаг>)
— если в качестве параметра указано значение
True
, то четные и нечетные строки будут иметь разный цвет фона;
 setIndexWidget(, )
— устанавливает компонент в позицию, указанную индексом (экземпляр класса
QModelIndex
), и делает его потомком представ- ления. Если в той позиции уже находится какой-либо компонент, он удаляется;
 indexWidget()
— возвращает ссылку на компонент, который был ранее установлен в позицию, указанную индексом (экземпляр класса
QModelIndex
);
 setSelectionModel()
— устанавливает модель выделения;
 selectionModel()
— возвращает модель выделения;
 setSelectionMode(<Режим>)
— задает режим выделения элементов. В качестве параметра указываются следующие атрибуты класса
QAbstractItemView
:

NoSelection

0
— элементы не могут быть выделены;

SingleSelection

1
— можно выделить только один элемент;

MultiSelection

2
— можно выделить несколько элементов. Повторный щелчок на элементе снимает выделение;

ExtendedSelection

3
— можно выделить несколько элементов, щелкая на них мышью и удерживая при этом нажатой клавишу . Можно также нажать на эле- менте левую кнопку мыши и перемещать мышь, не отпуская кнопку. Если удержи- вать нажатой клавишу , все элементы от текущей позиции до позиции щелчка мышью выделяются;

ContiguousSelection

4
— можно выделить несколько элементов, нажав на элемен- те левую кнопку мыши и перемещая мышь, не отпуская кнопку. Если удерживать нажатой клавишу , все элементы от текущей позиции до позиции щелчка мышью выделяются;
 setSelectionBehavior(<Режим>)
— задает режим представления выделенных элементов.
В качестве параметра указываются следующие атрибуты класса
QAbstractItemView
:

SelectItems

0
— выделяется отдельный элемент;

SelectRows

1
— выделяется строка целиком;

SelectColumns

2
— выделяется столбец целиком;
 selectAll()
— выделяет все элементы. Метод является слотом;
 clearSelection()
— снимает выделение. Метод является слотом;
 edit()
1   ...   44   45   46   47   48   49   50   51   ...   83


написать администратору сайта