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