ээдд. Прохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен. Николай Прохоренок Владимир Дронов
Скачать 7.92 Mb.
|
скрыта, и 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 класса |