ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 05.12.2023
Просмотров: 826
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
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()
— переключает элемент с заданным индексом (экземпляр класса
QModelIndex
) в режим редактирования, не делая его выделенным. Метод является сло- том;
setEditTriggers(<Режим>)
— задает действие, при котором элемент переключается в режим редактирования. В качестве параметра указывается комбинация следующих атрибутов класса
QAbstractItemView
:
•
NoEditTriggers
—
0
— элемент не поддерживает редактирование;
•
CurrentChanged
—
1
— при выделении элемента;
•
DoubleClicked
—
2
— при двойном щелчке мышью;
Глава 22. Списки и таблицы
515
•
SelectedClicked
—
4
— при щелчке мышью на уже выделенном элементе;
•
EditKeyPressed
—
8
— при нажатии клавиши;
•
AnyKeyPressed
—
16
— при нажатии любой символьной клавиши;
•
AllEditTriggers
—
31
— при любом упомянутом здесь действии;
setIconSize()
— задает размер значков;
setTextElideMode(<Режим>)
— задает режим обрезки текста, если он не помещается в отведенную область (в месте пропуска выводится троеточие). Могут быть указаны следующие атрибуты класса
QtCore.Qt
:
•
ElideLeft
—
0
— текст обрезается слева;
•
ElideRight
—
1
— текст обрезается справа;
•
ElideMiddle
—
2
— текст вырезается посередине;
•
ElideNone
—
3
— текст не обрезается;
setTabKeyNavigation(<Флаг>)
— если в качестве параметра указано значение
True
, меж- ду элементами можно перемещаться с помощью клавиш и +;
scrollTo([, hint=EnsureVisible])
— прокручивает представление таким образом, чтобы элемент, на который ссылается индекс (экземпляр класса
QModelIndex
), был видим. В параметре hint указываются следующие атрибуты класса
QAbstractItemView
:
•
EnsureVisible
—
0
— элемент должен находиться в области видимости;
•
PositionAtTop
—
1
— элемент должен находиться в верхней части;
•
PositionAtBottom
—
2
— элемент должен находиться в нижней части;
•
PositionAtCenter
—
3
— элемент должен находиться в центре;
scrollToTop()
— прокручивает представление в самое начало. Метод является слотом;
scrollToBottom()
— прокручивает представление в самый конец. Метод является сло- том;
setDragEnabled(<Флаг>)
— если в качестве параметра указано значение
True
, перетаски- вание элементов разрешено;
setDragDropMode(<Режим>)
— задает режим работы drag & drop. В качестве параметра указываются следующие атрибуты класса
QAbstractItemView
:
•
NoDragDrop
—
0
— drag & drop не поддерживается;
•
DragOnly
—
1
— поддерживается только перетаскивание;
•
DropOnly
—
2
— поддерживается только сбрасывание;
•
DragDrop
—
3
— поддерживается перетаскивание и сбрасывание;
•
InternalMove
—
4
— допускается лишь перетаскивание внутри компонента;
setDropIndicatorShown(<Флаг>)
— если в качестве параметра указано значение
True
, позиция возможного сброса элемента будет подсвечена;
setAutoScroll(<Флаг>)
— если в качестве параметра указано значение
True
, при пере- таскивании пункта будет производиться автоматическая прокрутка;
setAutoScrollMargin(<Отступ>)
— задает расстояние от края области, при достижении которого будет производиться автоматическая прокрутка области;
516
Часть II. Библиотека PyQt 5
update()
— обновляет элемент с заданным индексом. Метод является сло- том.
Класс
QAbstractItemView поддерживает следующие сигналы:
activated()
— генерируется при активизации элемента путем одинарного или двойного щелчка мышью или нажатия клавиши. В обработчике через пара- метр доступен индекс активного элемента;
pressed()
— генерируется при нажатии кнопки мыши над элементом.
Внутри обработчика через параметр доступен индекс элемента;
clicked()
— генерируется при щелчке мышью над элементом. Параметр хранит индекс элемента;
doubleClicked()
— генерируется при двойном щелчке мышью над эле- ментом. Параметр хранит индекс элемента;
entered()
— генерируется при вхождении указателя мыши в область эле- мента. Чтобы сигнал сработал, необходимо включить обработку перемещения указателя вызовом метода setMouseTracking()
, унаследованного от класса
QWidget
. Внутри обра- ботчика через параметр доступен индекс элемента;
viewportEntered
— генерируется при вхождении указателя мыши в область компонента.
Чтобы сигнал сработал, необходимо включить обработку перемещения указателя с по- мощью метода setMouseTracking()
, унаследованного от класса
QWidget
22.5.2. Простой список
Класс
QListView реализует простой список с возможностью выбора как одного, так и не- скольких пунктов. Кроме текста, в любом пункте такого списка может присутствовать зна- чок (рис. 22.1). Иерархия наследования выглядит так:
(QObject, QPaintDevice) — QWidget — QFrame — QAbstractScrollArea —
QAbstractItemView — QListView
Рис. 22.1. Компонент
QListView
Формат конструктора класса
QListView
:
<Объект> = QListView([parent=<Родитель>])
Типичный пример использования списка приведен в листинге 22.3.
Листинг 22.3. Простой список QListView lv = QtWidgets.QListView() sti = QtGui.QStandardItemModel(parent = window) lst = ['Perl', 'PHP', 'Python', 'Ruby']
Глава 22. Списки и таблицы
517 for row in range(0, 4): if row == 2: iconfile = 'python.png' else: iconfile = 'icon.png' item = QtGui.QStandardItem(QtGui.QIcon(iconfile), lst[row]) sti.appendRow(item) lv.setModel(sti)
Класс
QListView наследует все методы и сигналы из класса
QAbstractItemView
(см. разд. 22.5.1), включая методы setModel()
, model()
и selectedIndexes()
. Помимо этого, он дополнительно определяет следующие методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qlistview.html):
setModelColumn(<Индекс>)
— задает индекс отображаемого столбца в табличной модели
(по умолчанию отображается первый столбец с индексом
0
);
setViewMode(<Режим>)
— задает режим отображения элементов. В качестве параметра указываются следующие атрибуты класса
QListView
:
•
ListMode
—
0
— элементы размещаются сверху вниз, а значки имеют маленькие раз- меры;
•
IconMode
—
1
— элементы размещаются слева направо, а значки имеют большие раз- меры. Элементы можно свободно перемещать мышью;
setMovement(<Режим>)
— задает режим перемещения элементов. В качестве параметра указываются следующие атрибуты класса
QListView
:
•
Static
—
0
— пользователь не может перемещать элементы;
•
Free
—
1
— свободное перемещение;
•
Snap
—
2
— перемещаемые элементы автоматически выравниваются по сетке, разме- ры которой задаются методом setGridSize()
;
setGridSize()
— задает размеры сетки, по которой выравниваются перемещае- мые элементы;
setResizeMode(<Режим>)
— задает режим расположения элементов при изменении раз- мера списка. В качестве параметра указываются следующие атрибуты класса
QListView
:
•
Fixed
—
0
— элементы остаются в том же положении;
•
Adjust
—
1
— положение элементов изменяется при изменении размеров;
setFlow(<Режим>)
— задает порядок вывода элементов. В качестве параметра указыва- ются следующие атрибуты класса
QListView
:
•
LeftToRight
—
0
— слева направо;
•
TopToBottom
—
1
— сверху вниз;
setWrapping(<Флаг>)
— если в качестве параметра указано значение
False
, перенос эле- ментов на новую строку (если они не помещаются в ширину области) запрещен;
setWordWrap(<Флаг>)
— если в качестве параметра указано значение
True
, текст элемен- тов при необходимости будет переноситься по строкам;
setLayoutMode(<Режим>)
— задает режим размещения элементов. В качестве параметра указываются следующие атрибуты класса
QListView
:
518
Часть II. Библиотека PyQt 5
•
SinglePass
—
0
— элементы размещаются все сразу. Если список слишком большой, то окно останется заблокированным, пока все элементы не будут отображены;
•
Batched
—
1
— элементы размещаются блоками. Размер такого блока задается мето- дом setBatchSize(<Количество>)
;
setUniformItemSizes(<Флаг>)
— если в качестве параметра указано значение
True
, все элементы будут иметь одинаковый размер (по умолчанию они имеют разные размеры, зависящие от содержимого);
setSpacing(<Отступ>)
— задает отступ вокруг элемента;
setSelectionRectVisible(<Флаг>)
— если в качестве параметра указано значение
True
, будет отображаться вспомогательная рамка, показывающая область выделения. Метод доступен только при использовании режима множественного выделения;
setRowHidden(<Индекс>, <Флаг>)
— если во втором параметре указано значение
True
, строка с индексом, указанным в первом параметре, будет скрыта. Значение
False ото- бражает строку;
isRowHidden(<Индекс>)
— возвращает значение
True
, если строка с указанным индексом скрыта, и
False
— в противном случае.
Класс
QListView также поддерживает сигнал indexesMoved(<Элементы>)
, генерируемый при перемещении элементов. Внутри обработчика через параметр доступен список перемещае- мых элементов в виде экземпляров класса
QModelIndex
22.5.3. Таблица
Класс
QTableView реализует таблицу (рис. 22.2). Иерархия наследования выглядит так:
(QObject, QPaintDevice) — QWidget — QFrame — QAbstractScrollArea —
QAbstractItemView — QTableView
Рис. 22.2. Компонент
QTableView
Формат конструктора класса
QTableView
:
<Объект> = QTableView([parent=<Родитель>])
Класс
QTableView наследует все методы и сигналы из класса
QAbstractItemView
(см. разд. 22.5.1) и дополнительно поддерживает следующие методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qtableview.html):
selectRow(<Индекс>)
— выделяет строку с указанным индексом. Метод является слотом;
selectColumn(<Индекс>)
— выделяет столбец с указанным индексом. Метод является слотом;
Глава 22. Списки и таблицы
519
horizontalHeader()
— возвращает ссылку на горизонтальный заголовок, представлен- ный экземпляром класса
QHeaderView
;
verticalHeader()
— возвращает ссылку на вертикальный заголовок, представленный экземпляром класса
QHeaderView
. Например, вывести таблицу без заголовков можно сле- дующим образом: view.horizontalHeader().hide() view.verticalHeader().hide()
setRowHeight(<Индекс>, <Высота>)
— задает высоту строки с указанным в первом пара- метре индексом;
rowHeight(<Индекс>)
— возвращает высоту строки;
setColumnWidth(<Индекс>, <Ширина>)
— задает ширину столбца с указанным в первом параметре индексом;
columnWidth(<Индекс>)
— возвращает ширину столбца;
resizeRowToContents(<Индекс строки>)
— изменяет размер указанной строки таким об- разом, чтобы в нее поместилось все содержимое. Метод является слотом;
resizeRowsToContents()
— изменяет размер всех строк таким образом, чтобы в них по- местилось все содержимое. Метод является слотом;
resizeColumnToContents(<Индекс столбца>)
— изменяет размер указанного столбца та- ким образом, чтобы в него поместилось все содержимое. Метод является слотом;
resizeColumnsToContents()
— изменяет размер всех столбцов таким образом, чтобы в них поместилось содержимое. Метод является слотом;
setSpan(<Индекс строки>, <Индекс столбца>, <Количество строк>, <Количество столб- цов>)
— растягивает элемент с указанными в первых двух параметрах индексами на за- данное количество строк и столбцов, производя как бы объединение ячеек таблицы;
rowSpan(<Индекс строки>, <Индекс столбца>)
— возвращает количество ячеек в строке, которое занимает элемент с указанными индексами;
columnSpan(<Индекс строки>, <Индекс столбца>)
— возвращает количество ячеек в столбце, которое занимает элемент с указанными индексами;
clearSpans()
— отменяет все объединения ячеек;
setRowHidden(<Индекс>, <Флаг>)
— если во втором параметре указано значение
True
, то строка с индексом, указанным в первом параметре, будет скрыта. Значение
False ото- бражает строку;
hideRow(<Индекс>)
— скрывает строку с указанным индексом. Метод является слотом;
showRow(<Индекс>)
— отображает строку с указанным индексом. Метод является слотом;
isRowHidden(<Индекс>)
— возвращает значение
True
, если строка с указанным индексом скрыта, и
False
— в противном случае;
setColumnHidden(<Индекс>, <Флаг>)
— если во втором параметре указано значение
True
, то столбец с индексом, указанным в первом параметре, будет скрыт. Значение
False отображает столбец;
hideColumn(<Индекс>)
— скрывает столбец с указанным индексом. Метод является сло- том;
showColumn(<Индекс>)
— отображает столбец с указанным индексом. Метод является слотом;
520
Часть II. Библиотека PyQt 5
isColumnHidden(<Индекс>)
— возвращает значение
True
, если столбец с указанным ин- дексом скрыт, и
False
— в противном случае;
isIndexHidden()
— возвращает значение
True
, если элемент с указанным индексом (экземпляр класса
QModelIndex
) скрыт, и
False
— в противном случае;
setGridStyle(<Стиль>)
— задает стиль линий сетки. В качестве параметра указываются следующие атрибуты класса
QtCore.Qt
:
•
NoPen
—
0
— линии не выводятся;
•
SolidLine
—
1
— сплошная линия;
•
DashLine
—
2
— штриховая линия;
•
DotLine
—
3
— точечная линия;
•
DashDotLine
—
4
— штрих и точка, штрих и точка и т. д.;
•
DashDotDotLine
—
5
— штрих и две точки, штрих и две точки и т. д.;
setShowGrid(<Флаг>)
— если в качестве параметра указано значение
True
, то сетка будет отображена, а если
False
— то скрыта. Метод является слотом;
setSortingEnabled(<Флаг>)
— если в качестве параметра указано значение
True
, столб- цы можно сортировать с помощью щелчков мышью на их заголовках. При этом в заго- ловке показывается текущее направление сортировки;
setCornerButtonEnabled(<Флаг>)
— если в качестве параметра указано значение
True
, с помощью кнопки в левом верхнем углу заголовка можно выделить всю таблицу. Зна- чение
False отключает кнопку;
setWordWrap(<Флаг>)
— если в качестве параметра указано значение
True
, текст элемен- тов при необходимости будет переноситься по строкам;
sortByColumn(<Индекс столбца>, <Направление>)
— производит сортировку. Если во втором параметре указан атрибут
AscendingOrder класса
QtCore.Qt
, сортировка произво- дится в прямом порядке, а если
DescendingOrder
— в обратном.
22.5.4. Иерархический список
Класс
QTreeView реализует иерархический список (рис. 22.3). Иерархия наследования:
(QObject, QPaintDevice) — QWidget — QFrame — QAbstractScrollArea —
QAbstractItemView — QTreeView
Формат конструктора класса
QTreeView
:
<Объект> = QTreeView([parent=<Родитель>])
Рис. 22.3. Компонент
QTreeView
Глава 22. Списки и таблицы
521
Класс
QTreeView наследует все методы и сигналы класса
QAbstractItemView
(см. разд. 22.5.1) и дополнительно поддерживает следующие методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qtreeview.html):
header()
— возвращает ссылку на горизонтальный заголовок (экземпляр класса
QHeaderView
);
setColumnWidth(<Индекс>, <Ширина>)
— задает ширину столбца с указанным в первом параметре индексом;
columnWidth(<Индекс>)
— возвращает ширину столбца;
rowHeight()
— возвращает высоту строки, в которой находится элемент с указанным индексом (экземпляр класса
QModelIndex
);
resizeColumnToContents(<Индекс столбца>)
— изменяет ширину указанного столбца таким образом, чтобы в нем поместилось все содержимое. Метод является слотом;
setUniformRowHeights(<Флаг>)
— если в качестве параметра указано значение
True
, все элементы будут иметь одинаковую высоту;
setHeaderHidden(<Флаг>)
— если в качестве параметра указано значение
True
, заголовок будет скрыт. Значение
False отображает заголовок;
isHeaderHidden()
— возвращает значение
True
, если заголовок скрыт, и
False
— в про- тивном случае;
setColumnHidden(<Индекс>, <Флаг>)
— если во втором параметре указано значение
True
, то столбец с индексом, указанным в первом параметре, будет скрыт. Значение
False отображает столбец;
hideColumn(<Индекс>)
— скрывает столбец с указанным индексом. Метод является сло- том;
showColumn(<Индекс>)
— отображает столбец с указанным индексом. Метод является слотом;
isColumnHidden(<Индекс>)
— возвращает значение
True
, если столбец с указанным ин- дексом скрыт, и
False
— в противном случае;
setRowHidden(<Индекс>,, <Флаг>)
— если в третьем параметре указано значение
True
, то строка с индексом
<Индекс>
и родителем
будет скрыта.
Значение
False отображает строку;
isRowHidden(<Индекс>,)
— возвращает значение
True
, если строка с ука- занным индексом
<Индекс>
и родителем
;
clear()
— удаляет все элементы из модели;
item(<Строка>[, <Столбец>=0])
— возвращает ссылку на элемент (экземпляр класса
QStandardItem
), расположенный в указанной ячейке;
invisibleRootItem()
— возвращает ссылку на невидимый корневой элемент модели в виде экземпляра класса
QStandardItem
;
itemFromIndex(
— возвращает ссылку на элемент (экземпляр класса
QStandardItem
), на который ссылается заданный индекс;
index(<Строка>, <Столбец>[, parent=QModelIndex()])
— возвращает индекс элемента
(экземпляр класса
QModelIndex
), расположенного в указанной ячейке. Необязательный параметр parent задает элемент верхнего уровня для искомого элемента. Если таковой не задан, будет выполнен поиск элемента на самом верхнем уровне иерархии;
indexFromItem(
— возвращает индекс элемента (экземпляр класса
QModelIndex
), ссылка на который передана в качестве параметра;
setData(
— задает значение для роли role элемента, на который указывает индекс
. Метод возвращает значение
True
, если операция успешно выполнена;
data(
— возвращает данные, относящиеся к ука- занной роли элемента, на который ссылается индекс
;
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
— переключает элемент с заданным индексом (экземпляр класса
QModelIndex
) в режим редактирования, не делая его выделенным. Метод является сло- том;
setEditTriggers(<Режим>)
— задает действие, при котором элемент переключается в режим редактирования. В качестве параметра указывается комбинация следующих атрибутов класса
QAbstractItemView
:
•
NoEditTriggers
—
0
— элемент не поддерживает редактирование;
•
CurrentChanged
—
1
— при выделении элемента;
•
DoubleClicked
—
2
— при двойном щелчке мышью;
Глава 22. Списки и таблицы
515
•
SelectedClicked
—
4
— при щелчке мышью на уже выделенном элементе;
•
EditKeyPressed
—
8
— при нажатии клавиши
•
AnyKeyPressed
—
16
— при нажатии любой символьной клавиши;
•
AllEditTriggers
—
31
— при любом упомянутом здесь действии;
setIconSize(
— задает размер значков;
setTextElideMode(<Режим>)
— задает режим обрезки текста, если он не помещается в отведенную область (в месте пропуска выводится троеточие). Могут быть указаны следующие атрибуты класса
QtCore.Qt
:
•
ElideLeft
—
0
— текст обрезается слева;
•
ElideRight
—
1
— текст обрезается справа;
•
ElideMiddle
—
2
— текст вырезается посередине;
•
ElideNone
—
3
— текст не обрезается;
setTabKeyNavigation(<Флаг>)
— если в качестве параметра указано значение
True
, меж- ду элементами можно перемещаться с помощью клавиш
scrollTo(
— прокручивает представление таким образом, чтобы элемент, на который ссылается индекс (экземпляр класса
QModelIndex
), был видим. В параметре hint указываются следующие атрибуты класса
QAbstractItemView
:
•
EnsureVisible
—
0
— элемент должен находиться в области видимости;
•
PositionAtTop
—
1
— элемент должен находиться в верхней части;
•
PositionAtBottom
—
2
— элемент должен находиться в нижней части;
•
PositionAtCenter
—
3
— элемент должен находиться в центре;
scrollToTop()
— прокручивает представление в самое начало. Метод является слотом;
scrollToBottom()
— прокручивает представление в самый конец. Метод является сло- том;
setDragEnabled(<Флаг>)
— если в качестве параметра указано значение
True
, перетаски- вание элементов разрешено;
setDragDropMode(<Режим>)
— задает режим работы drag & drop. В качестве параметра указываются следующие атрибуты класса
QAbstractItemView
:
•
NoDragDrop
—
0
— drag & drop не поддерживается;
•
DragOnly
—
1
— поддерживается только перетаскивание;
•
DropOnly
—
2
— поддерживается только сбрасывание;
•
DragDrop
—
3
— поддерживается перетаскивание и сбрасывание;
•
InternalMove
—
4
— допускается лишь перетаскивание внутри компонента;
setDropIndicatorShown(<Флаг>)
— если в качестве параметра указано значение
True
, позиция возможного сброса элемента будет подсвечена;
setAutoScroll(<Флаг>)
— если в качестве параметра указано значение
True
, при пере- таскивании пункта будет производиться автоматическая прокрутка;
setAutoScrollMargin(<Отступ>)
— задает расстояние от края области, при достижении которого будет производиться автоматическая прокрутка области;
516
Часть II. Библиотека PyQt 5
update(
— обновляет элемент с заданным индексом. Метод является сло- том.
Класс
QAbstractItemView поддерживает следующие сигналы:
activated(
— генерируется при активизации элемента путем одинарного или двойного щелчка мышью или нажатия клавиши
pressed(
— генерируется при нажатии кнопки мыши над элементом.
Внутри обработчика через параметр доступен индекс элемента;
clicked(
— генерируется при щелчке мышью над элементом. Параметр хранит индекс элемента;
doubleClicked(
— генерируется при двойном щелчке мышью над эле- ментом. Параметр хранит индекс элемента;
entered(
— генерируется при вхождении указателя мыши в область эле- мента. Чтобы сигнал сработал, необходимо включить обработку перемещения указателя вызовом метода setMouseTracking()
, унаследованного от класса
QWidget
. Внутри обра- ботчика через параметр доступен индекс элемента;
viewportEntered
— генерируется при вхождении указателя мыши в область компонента.
Чтобы сигнал сработал, необходимо включить обработку перемещения указателя с по- мощью метода setMouseTracking()
, унаследованного от класса
QWidget
22.5.2. Простой список
Класс
QListView реализует простой список с возможностью выбора как одного, так и не- скольких пунктов. Кроме текста, в любом пункте такого списка может присутствовать зна- чок (рис. 22.1). Иерархия наследования выглядит так:
(QObject, QPaintDevice) — QWidget — QFrame — QAbstractScrollArea —
QAbstractItemView — QListView
Рис. 22.1. Компонент
QListView
Формат конструктора класса
QListView
:
<Объект> = QListView([parent=<Родитель>])
Типичный пример использования списка приведен в листинге 22.3.
Листинг 22.3. Простой список QListView lv = QtWidgets.QListView() sti = QtGui.QStandardItemModel(parent = window) lst = ['Perl', 'PHP', 'Python', 'Ruby']
Глава 22. Списки и таблицы
517 for row in range(0, 4): if row == 2: iconfile = 'python.png' else: iconfile = 'icon.png' item = QtGui.QStandardItem(QtGui.QIcon(iconfile), lst[row]) sti.appendRow(item) lv.setModel(sti)
Класс
QListView наследует все методы и сигналы из класса
QAbstractItemView
(см. разд. 22.5.1), включая методы setModel()
, model()
и selectedIndexes()
. Помимо этого, он дополнительно определяет следующие методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qlistview.html):
setModelColumn(<Индекс>)
— задает индекс отображаемого столбца в табличной модели
(по умолчанию отображается первый столбец с индексом
0
);
setViewMode(<Режим>)
— задает режим отображения элементов. В качестве параметра указываются следующие атрибуты класса
QListView
:
•
ListMode
—
0
— элементы размещаются сверху вниз, а значки имеют маленькие раз- меры;
•
IconMode
—
1
— элементы размещаются слева направо, а значки имеют большие раз- меры. Элементы можно свободно перемещать мышью;
setMovement(<Режим>)
— задает режим перемещения элементов. В качестве параметра указываются следующие атрибуты класса
QListView
:
•
Static
—
0
— пользователь не может перемещать элементы;
•
Free
—
1
— свободное перемещение;
•
Snap
—
2
— перемещаемые элементы автоматически выравниваются по сетке, разме- ры которой задаются методом setGridSize()
;
setGridSize(
— задает размеры сетки, по которой выравниваются перемещае- мые элементы;
setResizeMode(<Режим>)
— задает режим расположения элементов при изменении раз- мера списка. В качестве параметра указываются следующие атрибуты класса
QListView
:
•
Fixed
—
0
— элементы остаются в том же положении;
•
Adjust
—
1
— положение элементов изменяется при изменении размеров;
setFlow(<Режим>)
— задает порядок вывода элементов. В качестве параметра указыва- ются следующие атрибуты класса
QListView
:
•
LeftToRight
—
0
— слева направо;
•
TopToBottom
—
1
— сверху вниз;
setWrapping(<Флаг>)
— если в качестве параметра указано значение
False
, перенос эле- ментов на новую строку (если они не помещаются в ширину области) запрещен;
setWordWrap(<Флаг>)
— если в качестве параметра указано значение
True
, текст элемен- тов при необходимости будет переноситься по строкам;
setLayoutMode(<Режим>)
— задает режим размещения элементов. В качестве параметра указываются следующие атрибуты класса
QListView
:
518
Часть II. Библиотека PyQt 5
•
SinglePass
—
0
— элементы размещаются все сразу. Если список слишком большой, то окно останется заблокированным, пока все элементы не будут отображены;
•
Batched
—
1
— элементы размещаются блоками. Размер такого блока задается мето- дом setBatchSize(<Количество>)
;
setUniformItemSizes(<Флаг>)
— если в качестве параметра указано значение
True
, все элементы будут иметь одинаковый размер (по умолчанию они имеют разные размеры, зависящие от содержимого);
setSpacing(<Отступ>)
— задает отступ вокруг элемента;
setSelectionRectVisible(<Флаг>)
— если в качестве параметра указано значение
True
, будет отображаться вспомогательная рамка, показывающая область выделения. Метод доступен только при использовании режима множественного выделения;
setRowHidden(<Индекс>, <Флаг>)
— если во втором параметре указано значение
True
, строка с индексом, указанным в первом параметре, будет скрыта. Значение
False ото- бражает строку;
isRowHidden(<Индекс>)
— возвращает значение
True
, если строка с указанным индексом скрыта, и
False
— в противном случае.
Класс
QListView также поддерживает сигнал indexesMoved(<Элементы>)
, генерируемый при перемещении элементов. Внутри обработчика через параметр доступен список перемещае- мых элементов в виде экземпляров класса
QModelIndex
22.5.3. Таблица
Класс
QTableView реализует таблицу (рис. 22.2). Иерархия наследования выглядит так:
(QObject, QPaintDevice) — QWidget — QFrame — QAbstractScrollArea —
QAbstractItemView — QTableView
Рис. 22.2. Компонент
QTableView
Формат конструктора класса
QTableView
:
<Объект> = QTableView([parent=<Родитель>])
Класс
QTableView наследует все методы и сигналы из класса
QAbstractItemView
(см. разд. 22.5.1) и дополнительно поддерживает следующие методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qtableview.html):
selectRow(<Индекс>)
— выделяет строку с указанным индексом. Метод является слотом;
selectColumn(<Индекс>)
— выделяет столбец с указанным индексом. Метод является слотом;
Глава 22. Списки и таблицы
519
horizontalHeader()
— возвращает ссылку на горизонтальный заголовок, представлен- ный экземпляром класса
QHeaderView
;
verticalHeader()
— возвращает ссылку на вертикальный заголовок, представленный экземпляром класса
QHeaderView
. Например, вывести таблицу без заголовков можно сле- дующим образом: view.horizontalHeader().hide() view.verticalHeader().hide()
setRowHeight(<Индекс>, <Высота>)
— задает высоту строки с указанным в первом пара- метре индексом;
rowHeight(<Индекс>)
— возвращает высоту строки;
setColumnWidth(<Индекс>, <Ширина>)
— задает ширину столбца с указанным в первом параметре индексом;
columnWidth(<Индекс>)
— возвращает ширину столбца;
resizeRowToContents(<Индекс строки>)
— изменяет размер указанной строки таким об- разом, чтобы в нее поместилось все содержимое. Метод является слотом;
resizeRowsToContents()
— изменяет размер всех строк таким образом, чтобы в них по- местилось все содержимое. Метод является слотом;
resizeColumnToContents(<Индекс столбца>)
— изменяет размер указанного столбца та- ким образом, чтобы в него поместилось все содержимое. Метод является слотом;
resizeColumnsToContents()
— изменяет размер всех столбцов таким образом, чтобы в них поместилось содержимое. Метод является слотом;
setSpan(<Индекс строки>, <Индекс столбца>, <Количество строк>, <Количество столб- цов>)
— растягивает элемент с указанными в первых двух параметрах индексами на за- данное количество строк и столбцов, производя как бы объединение ячеек таблицы;
rowSpan(<Индекс строки>, <Индекс столбца>)
— возвращает количество ячеек в строке, которое занимает элемент с указанными индексами;
columnSpan(<Индекс строки>, <Индекс столбца>)
— возвращает количество ячеек в столбце, которое занимает элемент с указанными индексами;
clearSpans()
— отменяет все объединения ячеек;
setRowHidden(<Индекс>, <Флаг>)
— если во втором параметре указано значение
True
, то строка с индексом, указанным в первом параметре, будет скрыта. Значение
False ото- бражает строку;
hideRow(<Индекс>)
— скрывает строку с указанным индексом. Метод является слотом;
showRow(<Индекс>)
— отображает строку с указанным индексом. Метод является слотом;
isRowHidden(<Индекс>)
— возвращает значение
True
, если строка с указанным индексом скрыта, и
False
— в противном случае;
setColumnHidden(<Индекс>, <Флаг>)
— если во втором параметре указано значение
True
, то столбец с индексом, указанным в первом параметре, будет скрыт. Значение
False отображает столбец;
hideColumn(<Индекс>)
— скрывает столбец с указанным индексом. Метод является сло- том;
showColumn(<Индекс>)
— отображает столбец с указанным индексом. Метод является слотом;
520
Часть II. Библиотека PyQt 5
isColumnHidden(<Индекс>)
— возвращает значение
True
, если столбец с указанным ин- дексом скрыт, и
False
— в противном случае;
isIndexHidden(
— возвращает значение
True
, если элемент с указанным индексом (экземпляр класса
QModelIndex
) скрыт, и
False
— в противном случае;
setGridStyle(<Стиль>)
— задает стиль линий сетки. В качестве параметра указываются следующие атрибуты класса
QtCore.Qt
:
•
NoPen
—
0
— линии не выводятся;
•
SolidLine
—
1
— сплошная линия;
•
DashLine
—
2
— штриховая линия;
•
DotLine
—
3
— точечная линия;
•
DashDotLine
—
4
— штрих и точка, штрих и точка и т. д.;
•
DashDotDotLine
—
5
— штрих и две точки, штрих и две точки и т. д.;
setShowGrid(<Флаг>)
— если в качестве параметра указано значение
True
, то сетка будет отображена, а если
False
— то скрыта. Метод является слотом;
setSortingEnabled(<Флаг>)
— если в качестве параметра указано значение
True
, столб- цы можно сортировать с помощью щелчков мышью на их заголовках. При этом в заго- ловке показывается текущее направление сортировки;
setCornerButtonEnabled(<Флаг>)
— если в качестве параметра указано значение
True
, с помощью кнопки в левом верхнем углу заголовка можно выделить всю таблицу. Зна- чение
False отключает кнопку;
setWordWrap(<Флаг>)
— если в качестве параметра указано значение
True
, текст элемен- тов при необходимости будет переноситься по строкам;
sortByColumn(<Индекс столбца>, <Направление>)
— производит сортировку. Если во втором параметре указан атрибут
AscendingOrder класса
QtCore.Qt
, сортировка произво- дится в прямом порядке, а если
DescendingOrder
— в обратном.
22.5.4. Иерархический список
Класс
QTreeView реализует иерархический список (рис. 22.3). Иерархия наследования:
(QObject, QPaintDevice) — QWidget — QFrame — QAbstractScrollArea —
QAbstractItemView — QTreeView
Формат конструктора класса
QTreeView
:
<Объект> = QTreeView([parent=<Родитель>])
Рис. 22.3. Компонент
QTreeView
Глава 22. Списки и таблицы
521
Класс
QTreeView наследует все методы и сигналы класса
QAbstractItemView
(см. разд. 22.5.1) и дополнительно поддерживает следующие методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qtreeview.html):
header()
— возвращает ссылку на горизонтальный заголовок (экземпляр класса
QHeaderView
);
setColumnWidth(<Индекс>, <Ширина>)
— задает ширину столбца с указанным в первом параметре индексом;
columnWidth(<Индекс>)
— возвращает ширину столбца;
rowHeight(
— возвращает высоту строки, в которой находится элемент с указанным индексом (экземпляр класса
QModelIndex
);
resizeColumnToContents(<Индекс столбца>)
— изменяет ширину указанного столбца таким образом, чтобы в нем поместилось все содержимое. Метод является слотом;
setUniformRowHeights(<Флаг>)
— если в качестве параметра указано значение
True
, все элементы будут иметь одинаковую высоту;
setHeaderHidden(<Флаг>)
— если в качестве параметра указано значение
True
, заголовок будет скрыт. Значение
False отображает заголовок;
isHeaderHidden()
— возвращает значение
True
, если заголовок скрыт, и
False
— в про- тивном случае;
setColumnHidden(<Индекс>, <Флаг>)
— если во втором параметре указано значение
True
, то столбец с индексом, указанным в первом параметре, будет скрыт. Значение
False отображает столбец;
hideColumn(<Индекс>)
— скрывает столбец с указанным индексом. Метод является сло- том;
showColumn(<Индекс>)
— отображает столбец с указанным индексом. Метод является слотом;
isColumnHidden(<Индекс>)
— возвращает значение
True
, если столбец с указанным ин- дексом скрыт, и
False
— в противном случае;
setRowHidden(<Индекс>,
— если в третьем параметре указано значение
True
, то строка с индексом
<Индекс>
и родителем
будет скрыта.
Значение
False отображает строку;
isRowHidden(<Индекс>,
— возвращает значение
True
, если строка с ука- занным индексом
<Индекс>
и родителем
1 ... 45 46 47 48 49 50 51 52 ... 83