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

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


Скачать 7.92 Mb.
НазваниеНиколай Прохоренок Владимир Дронов
Дата05.05.2023
Размер7.92 Mb.
Формат файлаpdf
Имя файлаПрохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен.pdf
ТипДокументы
#1111379
страница50 из 83
1   ...   46   47   48   49   50   51   52   53   ...   83

скрыта, и
False
— в противном случае;
 isIndexHidden()
— возвращает значение
True
, если элемент с указанным индексом (экземпляр класса
QModelIndex
) скрыт, и
False
— в противном случае;
 setExpanded(, <Флаг>)
— если во втором параметре указано значение
True
, то элементы, которые являются дочерними для элемента с указанным в первом па- раметре индексом, будут отображены, а если
False
— то скрыты. В первом параметре указывается экземпляр класса
QModelIndex
;
 expand()
— отображает элементы, которые являются дочерними для эле- мента с указанным индексом. В качестве параметра указывается экземпляр класса
QModelIndex
. Метод является слотом;

522
Часть II. Библиотека PyQt 5
 expandToDepth(<Уровень>)
— отображает все дочерние элементы до указанного уровня.
Метод является слотом;
 expandAll()
— отображает все дочерние элементы. Метод является слотом;
 collapse()
— скрывает элементы, которые являются дочерними для эле- мента с указанным индексом. В качестве параметра указывается экземпляр класса
QModelIndex
. Метод является слотом;
 collapseAll()
— скрывает все дочерние элементы. Метод является слотом;
 isExpanded()
— возвращает значение
True
, если элементы, которые явля- ются дочерними для элемента с указанным индексом, отображены, и
False
— в против- ном случае. В качестве параметра указывается экземпляр класса
QModelIndex
;
 setItemsExpandable(<Флаг>)
— если в качестве параметра указано значение
False
, поль- зователь не сможет отображать или скрывать дочерние элементы;
 setAnimated(<Флаг>)
— если в качестве параметра указано значение
True
, отображение и сокрытие дочерних элементов будет производиться с анимацией;
 setIndentation(<Оступ>)
— задает отступ для дочерних элементов;
 setRootIsDecorated(<Флаг>)
— если в качестве параметра указано значение
False
, для элементов верхнего уровня не будут показываться элементы управления, с помощью которых производится отображение и сокрытие дочерних элементов;
 setFirstColumnSpanned(<Индекс строки>, , <Флаг>)
— если третьим па- раметром передано значение
True
, содержимое первого столбца строки с указанным в первом параметре индексом и родителем, заданным во втором параметре (как экземп- ляр класса
QModelIndex
), займет всю ширину списка;
 setExpandsOnDoubleClick(<Флаг>)
— если передать в параметре значение
False
, свора- чивание и разворачивание пунктов списка будет выполняться по двойному щелчку мыши;
 setSortingEnabled(<Флаг>)
— если в качестве параметра указано значение
True
, столб- цы можно сортировать с помощью щелчка мышью на заголовке столбца. При этом в за- головке показывается текущее направление сортировки;
 sortByColumn(<Индекс столбца>[, AscendingOrder])
— производит сортировку. Если во втором параметре указан атрибут
AscendingOrder класса
QtCore.Qt
, сортировка произво- дится в прямом порядке, а если
DescendingOrder
— в обратном;
 setWordWrap(<Флаг>)
— если в качестве параметра указано значение
True
, текст элемен- тов при необходимости будет переноситься по строкам.
Класс
QTreeView поддерживает сигналы:
 expanded()
— генерируется при отображении дочерних элементов. Внутри обработчика через параметр доступен индекс (экземпляр класса
QModelIndex
) элемента;
 collapsed()
— генерируется при сокрытии дочерних элементов. Внутри обработчика через параметр доступен индекс (экземпляр класса
QModelIndex
) элемента.
22.5.5. Управление заголовками строк и столбцов
Класс
QHeaderView представляет заголовки строк и столбцов в компонентах
QTableView и
QTreeView
. Получить ссылки на заголовки в классе
QTableView позволяют методы horizontalHeader()
и verticalHeader()
, а для установки заголовков предназначены методы

Глава 22. Списки и таблицы
523 setHorizontalHeader()
и setVerticalHeader()
. Получить ссыл- ку на заголовок в классе
QTreeView позволяет метод header()
, а для установки заголовка предназначен метод setHeader()
. Иерархия наследования:
(QObject, QPaintDevice) — QWidget — QFrame — QAbstractScrollArea —
QAbstractItemView — QHeaderView
Формат конструктора класса
QHeaderView
:
<Объект> = QHeaderView(<Ориентация>[, parent=<Родитель>])
Параметр
<Ориентация>
позволяет задать ориентацию заголовка. В качестве значения ука- зываются атрибуты
Horizontal или
Vertical класса
QtCore.Qt
Класс
QHeaderView наследует все методы и сигналы класса
QAbstractItemView
(см. разд. 22.5.1) и дополнительно определяет следующие основные методы (полный их список можно найти на странице https://doc.qt.io/qt-5/qheaderview.html):
 count()
— возвращает количество секций в заголовке. Получить количество секций можно также с помощью функции len()
;
 setDefaultSectionSize(<Размер>)
— задает размер секций по умолчанию;
 defaultSectionSize()
— возвращает размер секций по умолчанию;
 setMinimumSectionSize(<Размер>)
— задает минимальный размер секций;
 minimumSectionSize()
— возвращает минимальный размер секций;
 setMaximumSectionSize(<Размер>)
— задает максимальный размер секций;
 maximumSectionSize()
— возвращает максимальный размер секций;
 resizeSection(<Индекс>, <Размер>)
— изменяет размер секции с указанным индексом;
 sectionSize(<Индекс>)
— возвращает размер секции с указанным индексом;
 setSectionResizeMode(<Режим>)
— задает режим изменения размеров для всех секций.
В качестве параметра могут быть указаны следующие атрибуты класса
QHeaderView
:

Interactive

0
— размер может быть изменен пользователем или программно;

Stretch

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

Fixed

2
— размер может быть изменен только программно;

ResizeToContents

3
— размер определяется автоматически по содержимому сек- ции. Размер не может быть изменен ни пользователем, ни программно;
 setSectionResizeMode(<Индекс>, <Режим>)
— задает режим изменения размеров для секции с указанным индексом;
 setStretchLastSection(<Флаг>)
— если в качестве параметра указано значение
True
, последняя секция будет занимать все свободное пространство;
 setCascadingSectionResizes(<Флаг>)
— если в качестве параметра указано значение
True
, изменение размеров одной секции может привести к изменению размеров других секций;
 setSectionHidden(<Индекс>, <Флаг>)
— если во втором параметре указано значение
True
, секция с индексом, указанным в первом параметре, будет скрыта. Значение
False отображает секцию;

524
Часть II. Библиотека PyQt 5
 hideSection(<Индекс>)
— скрывает секцию с указанным индексом;
 showSection(<Индекс>)
— отображает секцию с указанным индексом;
 isSectionHidden(<Индекс>)
— возвращает значение
True
, если секция с указанным ин- дексом скрыта, и
False
— в противном случае;
 sectionsHidden()
— возвращает значение
True
, если существует хотя бы одна скрытая секция, и
False
— в противном случае;
 hiddenSectionCount()
— возвращает количество скрытых секций;
 setDefaultAlignment(<Выравнивание>)
— задает выравнивание текста внутри заголов- ков;
 setHighlightSections(<Флаг>)
— если в качестве параметра указано значение
True
, то текст заголовка текущей секции будет выделен;
 setSectionsClickable(<Флаг>)
— если в качестве параметра указано значение
True
, за- головок будет реагировать на щелчок мышью, при этом выделяя все элементы секции;
 setSectionsMovable(<Флаг>)
— если в качестве параметра указано значение
True
, поль- зователь может перемещать секции с помощью мыши;
 sectionsMovable()
— возвращает значение
True
, если пользователь может перемещать секции с помощью мыши, и
False
— в противном случае;
 moveSection(<Откуда>, <Куда>)
— позволяет переместить секцию. В параметрах указы- ваются визуальные индексы;
 swapSections(<Секция1>, <Секция2>)
— меняет две секции местами. В параметрах ука- зываются визуальные индексы;
 visualIndex(<Логический индекс>)
— преобразует логический индекс (первоначальный порядок следования) в визуальный (отображаемый в настоящее время порядок следова- ния). Если преобразование прошло неудачно, возвращается значение
-1
;
 logicalIndex(<Визуальный индекс>)
— преобразует визуальный индекс (отображаемый в настоящее время порядок следования) в логический (первоначальный порядок следо- вания. Если преобразование прошло неудачно, возвращается значение
-1
;
 saveState()
— возвращает экземпляр класса
QByteArray с текущими размерами и поло- жением секций;
 restoreState()
— восстанавливает размеры и положение секций на основе экземпляра класса
QByteArray
, возвращаемого методом saveState()
Класс
QHeaderView поддерживает следующие сигналы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qheaderview.html):
 sectionPressed(<Логический индекс>)
— генерируется при нажатии левой кнопки мыши над заголовком секции. Внутри обработчика через параметр доступен целочисленный логический индекс секции;
 sectionClicked(<Логический индекс>)
— генерируется при нажатии и отпускании левой кнопки мыши над заголовком секции. Внутри обработчика через параметр доступен це- лочисленный логический индекс секции;
 sectionDoubleClicked(<Логический индекс>)
— генерируется при двойном щелчке мышью на заголовке секции. Внутри обработчика через параметр доступен целочислен- ный логический индекс секции;

Глава 22. Списки и таблицы
525
 sectionMoved(<Логический индекс>, <Старый визуальный индекс>, <Новый визуальный индекс>)
— генерируется при изменении положения секции. Все параметры целочис- ленные;
 sectionResized(<Логический индекс>, <Старый размер>, <Новый размер>)
— генериру- ется непрерывно при изменении размера секции. Все параметры целочисленные.
22.6. Управление выделением элементов
Класс
QItemSelectionModel
, объявленный в модуле
QtCore
, реализует модель, позволяющую централизованно управлять выделением сразу в нескольких представлениях. Установить модель выделения позволяет метод setSelectionModel()
класса
QAbstractItemView
, а получить ссылку на модель можно с помощью метода selectionModel()
. Если одна модель выделения установлена сразу в нескольких представ- лениях, то выделение элемента в одном представлении приведет к выделению соответст- вующего элемента в другом представлении. Иерархия наследования выглядит так:
QObject — QItemSelectionModel
Форматы конструктора класса
QItemSelectionModel
:
<Объект> = QItemSelectionModel(<Модель>)
<Объект> = QItemSelectionModel(<Модель>, <Родитель>)
Класс
QItemSelectionModel поддерживает следующие полезные методы (полный их список можно найти на странице https://doc.qt.io/qt-5/qitemselectionmodel.html):
 hasSelection()
— возвращает значение
True
, если существует выделенный элемент, и
False
— в противном случае;
 isSelected()
— возвращает значение
True
, если элемент с указанным ин- дексом (экземпляр класса
QModelIndex
) выделен, и
False
— в противном случае;
 isRowSelected(<Индекс>, )
— возвращает значение
True
, если строка с индексом
<Индекс>
и родителем

выделена, и
False
— в противном случае;
 isColumnSelected(<Индекс>, )
— возвращает значение
True
, если столбец с индексом
<Индекс>
и родителем

выделен, и
False
— в противном слу- чае;
 rowIntersectsSelection(<Индекс>, )
— возвращает значение
True
, если строка с индексом
<Индекс>
и родителем

содержит выделенный элемент, и
False
— в противном случае;
 columnIntersectsSelection(<Индекс>, )
— возвращает значение
True
, если столбец с индексом
<Индекс>
и родителем

содержит выделенный элемент, и
False
— в противном случае;
 selectedIndexes()
— возвращает список индексов (экземпляров класса
QModelIndex
) выделенных элементов или пустой список, если выделенных элементов нет;
 selectedRows([<Индекс столбца>=0])
— возвращает список индексов (экземпляров клас- са
QModelIndex
) выделенных элементов из указанного столбца. Элемент попадет в спи- сок только в том случае, если строка выделена полностью;
 selectedColumns([<Индекс строки>=0])
— возвращает список индексов (экземпляров класса
QModelIndex
) выделенных элементов из указанной строки. Элемент попадет в список только в том случае, если столбец выделен полностью;

526
Часть II. Библиотека PyQt 5
 selection()
— возвращает ссылку на экземпляр класса
QItemSelection
;
 select(, <Режим>)
— изменяет выделение элемента с указанным индек- сом. Во втором параметре указываются следующие атрибуты (или их комбинация через оператор
|
) класса
QItemSelectionModel
:

NoUpdate
— без изменений;

Clear
— снимает выделение всех элементов;

Select
— выделяет элемент;

Deselect
— снимает выделение с элемента;

Toggle
— выделяет элемент, если он не выделен, или снимает выделение, если эле- мент был выделен;

Current
— обновляет выделение текущего элемента;

Rows
индекс будет расширен так, чтобы охватить всю строку;

Columns
— индекс будет расширен так, чтобы охватить весь столбец;

SelectCurrent
— комбинация
Select | Current
;

ToggleCurrent
— комбинация
Toggle | Current
;

ClearAndSelect
— комбинация
Clear | Select
Метод является слотом;
 select(, <Режим>)
— изменяет выделение элементов. Метод является слотом;
 setCurrentIndex(, <Режим>)
— делает элемент текущим и изменяет ре- жим выделения. Метод является слотом;
 currentIndex()
— возвращает индекс (экземпляр класса
QModelIndex
) текущего элемента;
 clearSelection()
— снимает все выделения. Метод является слотом.
Класс
QItemSelectionModel поддерживает следующие сигналы:
 currentChanged(, )
— генерируется при изменении индекса текущего элемента. Внутри обработчика через первый параметр доступен индекс пре- дыдущего элемента, а через второй — индекс нового элемента;
 currentRowChanged(, )
— генерируется при выделении эле- мента из другой строки. Внутри обработчика через первый параметр доступен индекс предыдущего элемента, а через второй — индекс нового элемента;
 currentColumnChanged(, )
— генерируется при выделении элемента из другого столбца. Внутри обработчика через первый параметр доступен ин- декс предыдущего элемента, а через второй — индекс нового элемента;
 selectionChanged(, )
— генерируется при изменении выделения. Внутри обработчика через первый параметр доступно предыдущее выделе- ние, а через второй — новое выделение.
22.7. Промежуточные модели
Как вы уже знаете, одну модель можно установить в нескольких представлениях. При этом изменение порядка следования элементов в одном представлении повлечет за собой изме- нение порядка следования элементов в другом. Чтобы предотвратить изменение порядка

Глава 22. Списки и таблицы
527 следования элементов в базовой модели, следует создать промежуточную модель с по- мощью класса
QSortFilterProxyModel
, объявленного в модуле
QtCore
, и установить ее в представлении. Иерархия наследования для класса
QSortFilterProxyModel выглядит так:
QObject — QAbstractItemModel — QAbstractProxyModel —
QSortFilterProxyModel
Формат конструктора класса
QSortFilterProxyModel
:
<Объект> = QSortFilterProxyModel([parent=<Родитель>])
Класс
QSortFilterProxyModel наследует следующие методы из класса
QAbstractProxyModel
(здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qabstractproxymodel.html):
 setSourceModel(<Модель>)
— устанавливает базовую модель;
 sourceModel()
— возвращает ссылку на базовую модель.
Класс
QSortFilterProxyModel поддерживает основные методы обычных моделей и допол- нительно определяет следующие основные методы (полный их список можно найти на странице https://doc.qt.io/qt-5/qsortfilterproxymodel.html):
 sort(<Индекс столбца>[, order=AscendingOrder])
— производит сортировку. Если во втором параметре указан атрибут
AscendingOrder класса
QtCore.Qt
, сортировка произво- дится в прямом порядке, а если
DescendingOrder
— в обратном. Если в параметре
<Индекс столбца>
указать значение
-1
, будет использован порядок следования элементов из базовой модели.
П
РИМЕЧАНИЕ
Чтобы включить сортировку столбцов пользователем, следует передать значение True в метод setSortingEnabled() объекта представления.
 setSortRole(<Роль>)
— задает роль (см. разд. 22.3), по которой производится сортиров- ка. По умолчанию сортировка производится по роли
DisplayRole
;
 setSortCaseSensitivity(<Режим>)
— если в качестве параметра указать атрибут
CaseInsensitive класса
1   ...   46   47   48   49   50   51   52   53   ...   83


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