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

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


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

502
Часть II. Библиотека PyQt 5
 setCurrentFont()
делает текущим элемент, соответствующий указанному шрифту. В качестве параметра указывается экземпляр класса
QFont
: comboBox.setCurrentFont(QtGui.QFont("Verdana"))
Метод является слотом;
 currentFont()
— возвращает экземпляр класса
QFont с выбранным шрифтом. Вот при- мер вывода названия шрифта: print(comboBox.currentFont().family())
 setFontFilters(<Фильтр>)
— ограничивает список указанными типами шрифтов. В ка- честве параметра указывается комбинация следующих атрибутов класса
QFontComboBox
:

AllFonts

0
— все типы шрифтов;

ScalableFonts

1
— масштабируемые шрифты;

NonScalableFonts

2
— немасштабируемые шрифты;

MonospacedFonts

4
— моноширинные шрифты;

ProportionalFonts

8
— пропорциональные шрифты.
Класс
QFontComboBox поддерживает сигнал currentFontChanged()
, который генери- руется при изменении текущего шрифта. Внутри обработчика доступен экземпляр класса
QFont с текущим шрифтом.
22.3. Роли элементов
Каждый элемент списка хранит набор величин, каждая из которых относится к определен- ной роли: текст элемента, шрифт и цвет, которым отображается элемент, текст всплываю- щей подсказки и многое другое. Приведем роли элементов (атрибуты класса
QtCore.Qt
):

DisplayRole

0
— отображаемые данные (обычно текст);

DecorationRole

1
— изображение (обычно значок);

EditRole

2
— данные в виде, удобном для редактирования;

ToolTipRole

3
— текст всплывающей подсказки;

StatusTipRole

4
— текст для строки состояния;

WhatsThisRole

5
— текст для справки;

FontRole

6
— шрифт элемента. Указывается экземпляр класса
QFont
;

TextAlignmentRole

7
— выравнивание текста внутри элемента;

BackgroundRole

8
— фон элемента. Указывается экземпляр класса
QBrush
;

ForegroundRole

9
— цвет текста. Указывается экземпляр класса
QBrush
;

CheckStateRole

10
— статус флажка. Могут быть указаны следующие атрибуты клас- са
QtCore.Qt
:

Unchecked

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

PartiallyChecked

1
— флажок частично установлен;

Checked

2
— флажок установлен;

AccessibleTextRole

11
— текст, выводящийся специализированными устройствами вывода — например, системами чтения с экрана;

Глава 22. Списки и таблицы
503

AccessibleDescriptionRole

12
— описание элемента, выводящееся специализирован- ными устройствами вывода — например, системами чтения с экрана;

SizeHintRole

13
— рекомендуемый размер элемента. Указывается экземпляр класса
QSize
;

UserRole

32
— любые пользовательские данные (например, индекс элемента в базе данных). Можно сохранить несколько данных, указав их в роли с индексом более
32
: comboBox.setItemData(0, 50, role=QtCore.Qt.UserRole) comboBox.setItemData(0, "Другие данные", role=QtCore.Qt.UserRole + 1)
22.4. Модели
Для отображения данных в виде списков и таблиц применяется концепция «модель- представление», позволяющая отделить данные от их внешнего вида и избежать дублиро- вания данных. В основе концепции лежат следующие составляющие:
 модель — является «оберткой» над данными. Позволяет считывать, добавлять, изменять, удалять данные и управлять ими;
 представление — предназначено для отображения элементов модели на экране. Сразу несколько представлений могут выводить одну и ту же модель;
 модель выделения — позволяет управлять выделением. Если одна модель выделения установлена сразу в нескольких представлениях, то выделение элемента в одном пред- ставлении приведет к выделению соответствующего элемента в другом;
 промежуточная модель — является прослойкой между моделью и представлением. По- зволяет производить сортировку и фильтрацию данных без изменения порядка следова- ния элементов в базовой модели;
 делегат — представляет компонент для вывода и редактирования данных. Существуют стандартные классы делегатов, кроме того, разработчик может создать свои классы.
22.4.1. Доступ к данным внутри модели
Доступ к данным внутри модели реализуется с помощью класса
QModelIndex из модуля
QtCore
Чаще всего экземпляр класса
QModelIndex создается с помощью метода index()
какого-либо класса модели или метода currentIndex()
, унаследованного моделями из класса
QAbstractItemView
. Такой экземпляр указывает на конкретные данные.
Если запрошенных данных в модели нет, возвращается пустой, невалидный экземпляр класса
QModelIndex
. Его также можно создать обычным вызовом конструктора:
<Объект> = QModelIndex()
Класс
QModelIndex поддерживает следующие методы:
 isValid()
— возвращает значение
True
, если объект является валидным, и
False
— в противном случае;
 data([role=DisplayRole])
— возвращает данные, относящиеся к указанной в параметре role роли (по умолчанию — выводимый на экран текст элемента списка);

504
Часть II. Библиотека PyQt 5
 flags()
— возвращает свойства элемента в виде комбинации следующих атрибутов класса
QtCore.Qt
:

NoItemFlags

0
— элемент не имеет свойств;

ItemIsSelectable

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

ItemIsEditable

2
— элемент можно редактировать;

ItemIsDragEnabled

4
— элемент можно перетаскивать;

ItemIsDropEnabled

8
— в элемент можно сбрасывать перетаскиваемые данные;

ItemIsUserCheckable

16
— элемент может быть установлен и сброшен;

ItemIsEnabled

32
— пользователь может взаимодействовать с элементом;

ItemIsTristate

64
— элемент имеет три состояния;

ItemNeverHasChildren

128
— элемент не может иметь вложенные элементы;
 row()
— возвращает индекс строки;
 column()
— возвращает индекс столбца;
 parent()
— возвращает индекс элемента (экземпляр класса
QModelIndex
), расположенно- го на один уровень выше по иерархии. Если такого элемента нет, возвращается невалид- ный экземпляр класса
QModelIndex
;
 child(<Строка>, <Столбец>)
— возвращает индекс элемента (экземпляр класса
QModelIndex
), расположенного на один уровень ниже указанной позиции по иерархии.
Если такого элемента нет, возвращается невалидный экземпляр класса
QModelIndex
;
 sibling(<Строка>, <Столбец>)
— возвращает индекс элемента (экземпляр класса
QModelIndex
), расположенного на том же уровне вложенности на указанной позиции.
Если такого элемента нет, возвращается невалидный экземпляр класса
QModelIndex
;
 model()
— возвращает ссылку на модель.
Также класс
QModelIndex поддерживает операторы сравнения
==
,
<
и
!=
, позволяющие срав- нивать экземпляры по их индексам.
Надо учитывать, что модель может измениться — тогда экземпляр класса
QModelIndex будет ссылаться на несуществующий уже элемент. Если необходимо сохранить ссылку на элемент, следует воспользоваться классом
QPersistentModelIndex
, который содержит те же самые методы, но обеспечивает валидность ссылки.
22.4.2. Класс QStringListModel
Класс
QStringListModel из модуля
QtCore реализует одномерную модель, содержащую спи- сок строк. Ее содержимое можно отобразить с помощью классов
QListView
,
QComboBox и др., передав в метод setModel()
представления. Иерархия наследования:
QObject — QAbstractItemModel — QAbstractListModel — QStringListModel
Форматы конструктора класса
QStringListModel
:
<Объект> = QStringListModel([parent=None])
<Объект> = QStringListModel(<Список строк>[, parent=None])
Пример: lst = ['Perl', 'PHP', 'Python', 'Ruby'] slm = QtCore.QStringListModel(lst, parent = window)

Глава 22. Списки и таблицы
505 cbo = QtWidgets.QComboBox() cbo.setModel(slm)
Класс
QStringListModel наследует метод index()
из класса
QAbstractListModel
, который возвращает индекс (экземпляр класса
QModelIndex
) элемента модели. Формат метода: index(<Строка>[, column=0][, parent=QModelIndex()])
Первый параметр задает номер строки в модели, в которой хранится нужный элемент. Не- обязательный параметр column указывает номер столбца модели — для класса
QStringListModel
, позволяющего хранить простые списки строк, его следует задать равным
0
. Необязательный параметр parent позволяет задать элемент верхнего уровня для искомого элемента — если таковой не задан, будет выполнен поиск элемента на самом верхнем уров- не иерархии.
Класс
QStringListModel поддерживает также следующие методы (здесь приведены толь- ко основные
— полный их список можно найти на странице https://doc.qt.io/qt-5/ qstringlistmodel.html):
 setStringList(<Список строк>)
— устанавливает список строк в качестве содержимого модели;
 stringList()
— возвращает список строк, хранящихся в модели;
 insertRows(<Индекс>, <Количество>[, parent=QModelIndex()])
— вставляет указанное количество пустых элементов в позицию, заданную первым параметром, остальные эле- менты сдвигаются в конец списка. Необязательный параметр parent позволяет указать элемент верхнего уровня, в который будут вложены добавляемые элементы, — если та- ковой не задан, элементы будут добавлены на самый верхний уровень иерархии. Метод возвращает значение
True
, если операция успешно выполнена;
 removeRows(<Индекс>, <Количество>[, parent=QModelIndex()])
— удаляет указанное количество элементов, начиная с позиции, заданной первым параметром. Необязатель- ный параметр parent позволяет указать элемент верхнего уровня, в который вложены удаляемые элементы, — если таковой не задан, элементы будут удалены из самого верх- него уровня иерархии. Метод возвращает значение
True
, если операция успешно выпол- нена;
 setData(, <Значение>[, role=EditRole])
— задает значение для роли role элемента, на который указывает индекс

. Метод возвращает значение
True
, если операция выполнена успешно: lst = QtWidgets.QComboBox() slm = QtCore.QStringListModel(parent = window) slm.insertRows(0, 4) slm.setData(slm.index(0), 'Perl') slm.setData(slm.index(1), 'PHP') slm.setData(slm.index(2), 'Python') slm.setData(slm.index(3), 'Ruby') lst.setModel(slm)
 data(, <Роль>)
— возвращает данные, хранимые в указанной роли эле- мента, на который ссылается индекс

;
 rowCount([parent=QModelIndex()])
— возвращает количество элементов в модели. Не- обязательный параметр parent указывает элемент верхнего уровня, при этом будет возвращено количество вложенных в него элементов. Если параметр не задан, будет возвращено количество элементов верхнего уровня иерархии;

506
Часть II. Библиотека PyQt 5
 sort(<Индекс столбца>[, order=AscendingOrder])
— производит сортировку. Если во втором параметре указан атрибут
AscendingOrder класса
QtCore.Qt
, сортировка произво- дится в прямом порядке, а если
DescendingOrder
— в обратном.
22.4.3. Класс QStandardItemModel
Класс
QStandardItemModel из модуля
QtGui реализует двумерную (таблица) и иерархиче- скую модели. Каждый элемент такой модели представлен классом
QStandardItem из того же модуля. Вывести на экран ее содержимое можно с помощью классов
QTableView
,
QTreeView и др., передав модель в метод setModel()
представления. Иерархия наследования:
QObject — QAbstractItemModel — QStandardItemModel
Форматы конструктора класса
QStandardItemModel
:
<Объект> = QStandardItemModel([parent=None])
<Объект> = QStandardItemModel(<Количество строк>, <Количество столбцов>
[, parent=None])
Пример создания и вывода на экран таблицы из трех столбцов: значка, названия языка про- граммирования и адреса веб-сайта приведен в листинге 22.1.
Листинг 22.1. Использование класса QStandardItemModel from PyQt5 import QtGui, QtWidgets import sys app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QWidget() window.setWindowTitle("QStandardItemModel") tv = QtWidgets.QTableView(parent=window) sti = QtGui.QStandardItemModel(parent=window) lst1 = ['Perl', 'PHP', 'Python', 'Ruby'] lst2 = ['http://www.perl.org/', 'http://php.net/', 'https://www.python.org/',
'https://www.ruby-lang.org/'] for row in range(0, 4): if row == 2: iconfile = 'python.png' else: iconfile = 'icon.png' item1 = QtGui.QStandardItem(QtGui.QIcon(iconfile), '') item2 = QtGui.QStandardItem(lst1[row]) item3 = QtGui.QStandardItem(lst2[row]) sti.appendRow([item1, item2, item3]) sti.setHorizontalHeaderLabels(['Значок', 'Название', 'Сайт']) tv.setModel(sti) tv.setColumnWidth(0, 50) tv.setColumnWidth(2, 180) tv.resize(350, 150) window.show() sys.exit(app.exec_())

Глава 22. Списки и таблицы
507
Класс
QStandardItemModel поддерживает следующие основные методы (полный их список можно найти на странице https://doc.qt.io/qt-5/qstandarditemmodel.html):
 setRowCount(<Количество строк>)
— задает количество строк;
 setColumnCount(<Количество столбцов>)
— задает количество столбцов;
 rowCount([parent=QModelIndex()])
— возвращает количество строк. Необязательный параметр parent указывает элемент верхнего уровня, при этом будет возвращено коли- чество вложенных в этот элемент строк, — если параметр не задан, будет возвращено количество строк верхнего уровня иерархии;
 columnCount([parent=QModelIndex()])
— возвращает количество столбцов. Необяза- тельный параметр parent в этом случае не используется;
 setItem(<Строка>, <Столбец>, )
— устанавливает элемент в указанную ячейку;
 appendRow(<Список>)
— добавляет одну строку в конец модели. В качестве параметра указывается список экземпляров класса
QStandardItem
, представляющих отдельные столбцы добавляемой строки;
 appendRow()
— добавляет строку из одной колонки в конец модели;
 appendColumn(<Список>)
— добавляет один столбец в конец модели. В качестве парамет- ра указывается список экземпляров класса
QStandardItem
, представляющих отдельные строки добавляемого столбца;
 insertRow(<Индекс строки>, <Список>)
— добавляет одну строку в указанную позицию модели. В качестве параметра
<Список>
указывается список экземпляров класса
QStandardItem
, представляющих отдельные столбцы добавляемой строки;
 insertRow(<Индекс>[, parent=QModelIndex()])
— добавляет одну пустую строку в ука- занную позицию модели. Необязательный параметр parent указывает элемент верхнего уровня, в который будет вложена добавляемая строка, — если параметр не задан, строка будет добавлена на самый верхний уровень иерархии. Метод возвращает значение
True
, если операция успешно выполнена;
 insertRow(<Индекс строки>, )
— добавляет строку из одного столбца в указанную позицию модели;
 insertRows(<Индекс>, <Количество>[, parent=QModelIndex()])
— добавляет несколько пустых строк в указанную позицию модели. Необязательный параметр parent указывает элемент верхнего уровня, в который будут вложены добавляемые строки, — если пара- метр не задан, строки будут добавлены на самый верхний уровень иерархии. Метод воз- вращает значение
True
, если операция успешно выполнена;
 insertColumn(<Индекс столбца>, <Список>)
— добавляет один столбец в указанную по- зицию модели. В качестве параметра
<Список>
указывается список экземпляров класса
QStandardItem
, представляющих отдельные строки добавляемого столбца;
 insertColumn(<Индекс>[, parent=QModelIndex()])
— добавляет один пустой столбец в указанную позицию. Необязательный параметр parent указывает элемент верхнего уровня — владелец элементов, в который будет добавлен столбец. Если этот параметр не задан, столбец будет добавлен в элементы самого верхнего уровня иерархии. Метод возвращает значение
True
, если операция выполнена успешно;
 insertColumns(<Индекс>, <Количество>[, parent=QModelIndex()])
— добавляет не- сколько пустых столбцов в указанную позицию. Необязательный параметр parent ука-

508
Часть II. Библиотека PyQt 5 зывает элемент верхнего уровня — владелец элементов, в который будут добавлены столбцы. Если этот параметр не задан, столбцы будут добавлены в элементы самого верхнего уровня иерархии. Метод возвращает значение
True
, если операция успешно выполнена;
 removeRows(<Индекс>, <Количество>[, parent=QModelIndex()])
— удаляет указанное количество строк, начиная со строки, имеющей индекс
<Индекс>
. Необязательный пара- метр parent указывает элемент верхнего уровня — владелец удаляемых строк. Если этот параметр не задан, будут удалены строки из самого верхнего уровня иерархии. Метод возвращает значение
True
, если операция успешно выполнена;
 removeColumns(<Индекс>, <Количество>[, parent=QModelIndex()])
удаляет указанное количество столбцов, начиная со столбца, имеющего индекс
<Индекс>
. Необязательный параметр parent указывает элемент верхнего уровня — владелец элементов, из которых будут удалены столбцы. Если этот параметр не задан, будут удалены столбцы из эле- ментов самого верхнего уровня иерархии. Метод возвращает значение
True
, если опера- ция успешно выполнена;
 takeItem(<Строка>[, <Столбец>=0])
— удаляет указанный элемент из модели и возвра- щает его в виде экземпляра класса
QStandardItem
;
 takeRow(<Индекс>)
— удаляет указанную строку из модели и возвращает ее в виде спи- ска экземпляров класса
QStandardItem
;
 takeColumn(<Индекс>)
— удаляет указанный столбец из модели и возвращает его в виде списка экземпляров класса
1   ...   43   44   45   46   47   48   49   50   ...   83


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