ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 05.12.2023
Просмотров: 853
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
450
Часть II. Библиотека PyQt 5 вкладка. Параметр
позволяет указать значок (экземпляр класса
QIcon
), который отобразится перед текстом в области заголовка.
•
Пример указания стандартного значка: style = window.style() icon = style.standardIcon(QtWidgets.QStyle.SP_DriveNetIcon) tab.addTab(QtWidgets.QLabel("Содержимое вкладки 1"), icon,
"Вкладка &1")
•
Пример загрузки значка из файла: icon = QtGui.QIcon("icon.png") tab.addTab(QtWidgets.QLabel("Содержимое вкладки 1"), icon,
"Вкладка &1")
insertTab()
— добавляет вкладку в указанную позицию и возвращает индекс этой вкладки. Форматы метода: insertTab(<Индекс>, <Компонент>, <Текст заголовка>) insertTab(<Индекс>, <Компонент>,
removeTab(<Индекс>)
— удаляет вкладку с указанным индексом, при этом компонент, который отображался на вкладке, не удаляется;
clear()
— удаляет все вкладки, при этом компоненты, которые отображались на вклад- ках, не удаляются;
setTabText(<Индекс>, <Текст заголовка>)
— задает текст заголовка для вкладки с ука- занным индексом;
setElideMode(<Режим>)
— задает режим обрезки текста в названии вкладки, если он не помещается в отведенную область (в месте пропуска выводится троеточие). Могут быть указаны следующие атрибуты класса
QtCore.Qt
:
•
ElideLeft
—
0
— текст обрезается слева;
•
ElideRight
—
1
— текст обрезается справа;
•
ElideMiddle
—
2
— текст вырезается посередине;
•
ElideNone
—
3
— текст не обрезается;
tabText(<Индекс>)
— возвращает текст заголовка вкладки с указанным индексом;
setTabIcon(<Индекс>,
— устанавливает значок перед текстом в заголовке вкладки с указанным индексом. Во втором параметре указывается экземпляр класса
QIcon
;
setTabPosition(<Позиция>)
— задает позицию области заголовка. Могут быть указаны следующие атрибуты класса
QTabWidget
:
•
North
—
0
— сверху;
•
South
—
1
— снизу;
•
West
—
2
— слева;
•
East
—
3
— справа.
Пример: tab.setTabPosition(QtWidgets.QTabWidget.South)
Глава 20. Размещение компонентов в окнах
451
setTabShape(<Форма>)
— задает форму углов ярлыка вкладки в области заголовка. Могут быть указаны следующие атрибуты класса
QTabWidget
:
•
Rounded
—
0
— скругленные углы (значение по умолчанию);
•
Triangular
—
1
— треугольная форма;
setTabsClosable(<Флаг>)
— если в качестве параметра указано значение
True
, то после текста заголовка вкладки будет отображена кнопка ее закрытия. По нажатию этой кноп- ки генерируется сигнал tabCloseRequested
;
setMovable(<Флаг>)
— если в качестве параметра указано значение
True
, ярлыки вкладок можно перемещать с помощью мыши;
setDocumentMode(<Флаг>)
— если в качестве параметра указано значение
True
, область компонента не будет отображаться как панель;
setUsesScrollButtons(<Флаг>)
— если в качестве параметра указано значение
True
, то, если все ярлыки вкладок не помещаются в область заголовка панели, появятся две кноп- ки, с помощью которых можно прокручивать область заголовка, тем самым отображая только часть ярлыков. Значение
False запрещает скрытие ярлыков;
setTabToolTip(<Индекс>, <Текст>)
— задает текст всплывающей подсказки для ярлыка вкладки с указанным индексом;
setTabWhatsThis(<Индекс>, <Текст>)
— задает текст справки для ярлыка вкладки с ука- занным индексом;
setTabEnabled(<Индекс>, <Флаг>)
— если вторым параметром передано значение
False
, вкладка с указанным в первом параметре индексом станет недоступной. Значение
True делает вкладку доступной;
isTabEnabled(<Индекс>)
— возвращает значение
True
, если вкладка с указанным индек- сом доступна, и
False
— в противном случае;
setCurrentIndex(<Индекс>)
— делает видимой вкладку с указанным в параметре индек- сом. Метод является слотом;
currentIndex()
— возвращает индекс видимой вкладки;
setCurrentWidget(<Компонент>)
— делает видимой вкладку с указанным компонентом.
Метод является слотом;
currentWidget()
— возвращает ссылку на компонент, расположенный на видимой вкладке;
widget(<Индекс>)
— возвращает ссылку на компонент, который расположен по указан- ному индексу, или значение
None
;
indexOf(<Компонент>)
— возвращает индекс вкладки, на которой расположен компо- нент. Если компонент не найден, возвращается значение
-1
;
count()
— возвращает количество вкладок. Получить количество вкладок можно также с помощью функции len()
: print(tab.count(), len(tab))
Класс
QTabWidget поддерживает такие сигналы:
currentChanged(<Индекс>)
— генерируется при переключении на другую вкладку. Через параметр внутри обработчика доступен целочисленный индекс новой вкладки;
452
Часть II. Библиотека PyQt 5
tabCloseRequested(<Индекс>)
— генерируется при нажатии кнопки закрытия вкладки.
Через параметр внутри обработчика доступен целочисленный индекс закрываемой вкладки.
20.10. Компонент «аккордеон»
Класс
QToolBox позволяет создать «аккордеон» — компонент с несколькими вкладками, в котором изначально отображается содержимое только одной вкладки, а у остальных ви- димы лишь заголовки. После щелчка мышью на заголовке вкладки она открывается, а ос- тальные сворачиваются. Иерархия наследования выглядит так:
(QObject, QPaintDevice) — QWidget — QFrame — QToolBox
Конструктор класса
QToolBox имеет следующий формат:
<Объект> = QToolBox([parent=<Родитель>][, flags=<Тип окна>])
В параметре parent указывается ссылка на родительский компонент. Если он не указан или имеет значение
None
, компонент будет обладать своим собственным окном. В параметре flags может быть указан тип окна.
Пример кода, создающего компонент класса
QToolBox
, представлен в листинге 20.7. Соз- данный им «аккордеон» показан на рис. 20.6.
Рис. 20.6. Пример использования класса
QToolBox
Листинг 20.7. Пример использования класса QToolBox
# -*- coding: utf-8 -*- from PyQt5 import QtWidgets import sys app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QWidget() window.setWindowTitle("QToolBox") window.resize(200, 100) toolBox = QtWidgets.QToolBox() toolBox.addItem(QtWidgets.QLabel("Содержимое вкладки 1"), "Вкладка &1") toolBox.addItem(QtWidgets.QLabel("Содержимое вкладки 2"), "Вкладка &2") toolBox.addItem(QtWidgets.QLabel("Содержимое вкладки 3"), "Вкладка &3") toolBox.setCurrentIndex(0)
Глава 20. Размещение компонентов в окнах
453 vbox = QtWidgets.QVBoxLayout() vbox.addWidget(toolBox) window.setLayout(vbox) window.show() sys.exit(app.exec_())
Класс
QToolBox поддерживает следующие методы (здесь приведены только основные — полный их список смотрите на странице https://doc.qt.io/qt-5/qtoolbox.html):
addItem()
— добавляет вкладку в конец контейнера. Метод возвращает индекс добав- ленной вкладки. Форматы метода: addItem(<Компонент>, <Текст заголовка>) addItem(<Компонент>,
В параметре
<Компонент>
указывается ссылка на компонент, который будет отображать- ся на вкладке. Чаще всего этот компонент является лишь родителем для других компо- нентов. Параметр
<Текст заголовка>
задает текст, который будет отображаться на ярлы- ке в области заголовка. Внутри текста заголовка символ
&
, указанный перед буквой, за- дает комбинацию клавиш быстрого доступа. В этом случае буква, перед которой указан символ
&
, будет — в качестве подсказки пользователю — подчеркнута. При одновре- менном нажатии клавиши
позволяет указать значок (экземпляр класса
QIcon
), который отобразится перед текстом в области заголовка;
insertItem()
— добавляет вкладку в указанную позицию. Метод возвращает индекс добавленной вкладки. Форматы метода: insertItem(<Индекс>, <Компонент>, <Текст заголовка>) insertItem(<Индекс>, <Компонент>,
removeItem(<Индекс>)
— удаляет вкладку с указанным индексом, при этом компонент, который отображался на вкладке, не удаляется;
setItemText(<Индекс>, <Текст заголовка>)
— задает текст заголовка для вкладки с ука- занным индексом;
itemText(<Индекс>)
— возвращает текст заголовка вкладки с указанным индексом;
setItemIcon(<Индекс>,
— устанавливает значок перед текстом в заголовке вкладки с указанным индексом. Во втором параметре указывается экземпляр класса
QIcon
;
setItemToolTip(<Индекс>, <Текст>)
— задает текст всплывающей подсказки для ярлыка вкладки с указанным индексом;
setItemEnabled(<Индекс>, <Флаг>)
— если вторым параметром передается значение
False
, вкладка с указанным в первом параметре индексом станет недоступной. Значение
True делает вкладку доступной;
isItemEnabled(<Индекс>)
— возвращает значение
True
, если вкладка с указанным индек- сом доступна, и
False
— в противном случае;
setCurrentIndex(<Индекс>)
— делает видимой вкладку с указанным индексом. Метод является слотом;
currentIndex()
— возвращает индекс видимой вкладки;
setCurrentWidget(<Компонент>)
— делает видимым вкладку с указанным компонентом.
Метод является слотом;
454
Часть II. Библиотека PyQt 5
currentWidget()
— возвращает ссылку на компонент, который расположен на видимой вкладке;
widget(<Индекс>)
— возвращает ссылку на компонент, который расположен по указан- ному индексу, или значение
None
;
indexOf(<Компонент>)
— возвращает индекс вкладки, на которой расположен компо- нент. Если компонент не найден, возвращается значение
-1
;
count()
— возвращает количество вкладок. Получить количество вкладок можно также с помощью функции len()
: print(toolBox.count(), len(toolBox))
При переключении на другую вкладку генерируется сигнал currentChanged(<Индекс>)
Через параметр внутри обработчика доступен целочисленный индекс вкладки, на кото- рую было выполнено переключение.
20.11. Панели с изменяемым размером
Класс
QSplitter позволяет изменять размеры добавленных компонентов, взявшись мышью за границу между компонентами. Иерархия наследования выглядит так:
(QObject, QPaintDevice) — QWidget — QFrame — QSplitter
Конструктор класса
QSplitter имеет два формата:
<Объект> = QSplitter([parent=<Родитель>])
<Объект> = QSplitter(<Ориентация>[, parent=<Родитель>])
В параметре parent указывается ссылка на родительский компонент. Если таковой не ука- зан или имеет значение
None
, компонент будет обладать своим собственным окном. Пара- метр
<Ориентация>
задает ориентацию размещения компонентов. Могут быть заданы атри- буты
Horizontal
(по горизонтали) или
Vertical
(по вертикали) класса
QtCore.Qt
. Если параметр не указан, компоненты размещаются по горизонтали.
Пример использования класса
QSplitter показан в листинге 20.8, а результат можно уви- деть на рис. 20.7.
Листинг 20.8. Пример использования класса QSplitter
# -*- coding: utf-8 -*- from PyQt5 import QtCore, QtWidgets import sys app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QWidget() window.setWindowTitle("QSplitter") window.resize(200, 200) splitter = QtWidgets.QSplitter(QtCore.Qt.Vertical) label1 = QtWidgets.QLabel("Содержимое компонента 1") label2 = QtWidgets.QLabel("Содержимое компонента 2") label1.setFrameStyle(QtWidgets.QFrame.Box | QtWidgets.QFrame.Plain) label2.setFrameStyle(QtWidgets.QFrame.Box | QtWidgets.QFrame.Plain) splitter.addWidget(label1) splitter.addWidget(label2)
Глава 20. Размещение компонентов в окнах
455 vbox = QtWidgets.QVBoxLayout() vbox.addWidget(splitter) window.setLayout(vbox) window.show() sys.exit(app.exec_())
Рис. 20.7. Пример использования класса
QSplitter
Класс
QSplitter поддерживает следующие методы (здесь приведены только основные — полный их список смотрите на странице https://doc.qt.io/qt-5/qsplitter.html):
addWidget(<Компонент>)
— добавляет компонент в конец контейнера;
insertWidget(<Индекс>, <Компонент>)
— добавляет компонент в указанную позицию.
Если компонент был добавлен ранее, он будет перемещен в новую позицию;
setOrientation(<Ориентация>)
— задает ориентацию размещения компонентов. Могут быть заданы атрибуты
Horizontal
(по горизонтали) или
Vertical
(по вертикали) класса
QtCore.Qt
;
setHandleWidth(<Ширина>)
— задает ширину компонента-разделителя, взявшись за кото- рый мышью, можно изменить размер области;
saveState()
— возвращает экземпляр класса
QByteArray с размерами всех областей. Эти данные можно сохранить (например, в файл), а затем восстановить с помощью метода restoreState()
;
restoreState(
— восстанавливает размеры областей компонента из эк- земпляра класса, возвращенного методом saveState()
;
setChildrenCollapsible(<Флаг>)
— если в параметре указано значение
False
, пользова- тель не сможет уменьшить размеры всех компонентов до нуля. По умолчанию размер может быть нулевым, даже если для какого-либо компонента установлены минимальные размеры;
setCollapsible(<Индекс>, <Флаг>)
— значение
False в параметре
<Флаг>
запрещает уменьшение размеров до нуля для компонента с указанным индексом;
setOpaqueResize(<Флаг>)
— если в качестве параметра указано значение
False
, размеры компонентов изменятся только после окончания перемещения границы и отпускания кнопки мыши. В процессе перемещения мыши вместе с ней будет перемещаться специ- альный компонент в виде линии;
setStretchFactor(<Индекс>, <Фактор>)
— задает фактор растяжения для компонента с указанным индексом;
456
Часть II. Библиотека PyQt 5
setSizes(<Список>)
— задает размеры всех компонентов. Для горизонтального контей- нера указывается список со значениями ширины каждого компонента, а для вертикаль- ного контейнера — список со значениями высоты каждого компонента;
sizes()
— возвращает список с размерами (шириной или высотой): print(splitter.sizes()) # Результат: [308, 15]
count()
— возвращает количество компонентов. Получить количество компонентов можно также с помощью функции len()
: print(splitter.count(), len(splitter))
widget(<Индекс>)
— возвращает ссылку на компонент, который расположен по указан- ному индексу, или значение
None
;
indexOf(<Компонент>)
— возвращает индекс области, в которой расположен компонент.
Если таковой не найден, возвращается значение
-1
При изменении размеров генерируется сигнал splitterMoved(<Позиция>, <Индекс>)
. Через первый параметр внутри обработчика доступна новая позиция, а через второй параметр — индекс перемещаемого разделителя; оба параметра целочисленные.
20.12. Область с полосами прокрутки
Класс
QScrollArea реализует область с полосами прокрутки. Если компонент не помещает- ся в размеры области, полосы прокрутки будут отображены автоматически. Иерархия на- следования выглядит так:
(QObject, QPaintDevice) — QWidget — QFrame —
QAbstractScrollArea — QScrollArea
Конструктор класса
QScrollArea имеет следующий формат:
<Объект> = QScrollArea([<Родитель>])
Класс
QScrollArea поддерживает следующие методы (здесь приведены только основные — полный их список смотрите на странице https://doc.qt.io/qt-5/qscrollarea.html):
setWidget(<Компонент>)
— помещает компонент в область прокрутки;
setWidgetResizable(<Флаг>
) — если в качестве параметра указано значение
True
, при изменении размеров области будут изменяться и размеры компонента. Значение
False запрещает изменение размеров компонента;
setAlignment(<Выравнивание>)
— задает местоположение компонента внутри области, когда размеры области больше размеров компонента: scrollArea.setAlignment(QtCore.Qt.AlignCenter)
ensureVisible(
— прокручивает область к точке с координатами
(
и полями xMargin и yMargin
;
ensureWidgetVisible(<Компонент>[, xMargin=50][, yMargin=50])
— прокручивает об- ласть таким образом, чтобы
<Компонент>
был видим;
widget()
— возвращает ссылку на компонент, который расположен внутри области, или значение
None
;
takeWidget()
— удаляет компонент из области и возвращает ссылку на него. Сам ком- понент не удаляется.
Глава 20. Размещение компонентов в окнах
457
Класс
QScrollArea наследует следующие методы из класса
QAbstractScrollArea
(здесь пе- речислены только основные — полный их список смотрите на странице https://doc.qt.io/ qt-5/qabstractscrollarea.html
):
horizontalScrollBar()
— возвращает ссылку на горизонтальную полосу прокрутки (эк- земпляр класса
QScrollBar
);
verticalScrollBar()
— возвращает ссылку на вертикальную полосу прокрутки (экземп- ляр класса
QScrollBar
);
setHorizontalScrollBarPolicy(<Режим>)
— устанавливает режим отображения горизон- тальной полосы прокрутки;
setVerticalScrollBarPolicy(<Режим>)
— устанавливает режим отображения вертикаль- ной полосы прокрутки.
В параметре
<Режим>
могут быть указаны следующие атрибуты из класса
QtCore.Qt
:
•
ScrollBarAsNeeded
—
0
— полоса прокрутки отображается только в том случае, если размеры компонента больше размеров области;
•
ScrollBarAlwaysOff
—
1
— полоса прокрутки никогда не отображается;
•
ScrollBarAlwaysOn
—
2
— полоса прокрутки отображается всегда.
ГЛ А В А
21
Основные компоненты
Практически все компоненты графического интерфейса определены в модуле
QtWidgets
(за исключением
QWebEngineWidgets
) и наследуют класс
QWidget
. Следовательно, методы этих классов, которые мы рассматривали в предыдущих главах, доступны всем компонентам.
Если компонент не имеет родителя, он обладает собственным окном, и его положение от- считывается, например, относительно экрана. Если же компонент имеет родителя, его по- ложение отсчитывается относительно родительского компонента. Это обстоятельство важ- но учитывать при работе с компонентами. Обращайте внимание на иерархию наследования, которую мы будем показывать для каждого компонента.
21.1. Надпись
Надпись применяется для вывода подсказки пользователю, информирования пользователя о ходе выполнения операции, назначении клавиш быстрого доступа и т. п. Кроме того, надписи позволяют отображать отформатированный с помощью CSS текст в формате
HTML, что позволяет реализовать простейший веб-браузер. В библиотеке PyQt 5 надпись реализуется с помощью класса
QLabel
. Иерархия наследования выглядит так:
(QObject, QPaintDevice) — QWidget — QFrame — QLabel
Конструктор класса
QLabel имеет два формата:
<Объект> = QLabel([parent=<Родитель>][, flags=<Тип окна>])
<Объект> = QLabel(<Текст>[, parent=<Родитель>][, flags=<Тип окна>])
В параметре parent указывается ссылка на родительский компонент. Если он не указан или имеет значение
None
, компонент будет обладать своим собственным окном, тип которого можно задать с помощью параметра flags
. Параметр
<Текст>
позволяет задать текст, кото- рый будет отображен на надписи: label = QtWidgets.QLabel("Текст надписи", flags=QtCore.Qt.Window) label.resize(300, 50) label.show()
Класс
QLabel поддерживает следующие основные методы (полный их список смотрите на странице https://doc.qt.io/qt-5/qlabel.html):
setText(<Текст>)
— задает текст, который будет отображен на надписи. Можно указать как обычный текст, так и содержащий CSS-форматирование текст в формате HTML: label.setText("Текст
1 ... 37 38 39 40 41 42 43 44 ... 83