Шаг 242.
Библиотека PyQt5.
Диалоговые окна. Класс QDialogButtonBox
На этом шаге мы рассмотрим назначение этого класса, иерархию наследования, формы его конструкторов, перечислим основные методы.
Класс QDialogButtonBox представляет контейнер, в который можно добавить различные кнопки: как стандартные, так и пользовательские. Внешний вид контейнера и расположение кнопок в
нем зависят от используемой операционной системы. Иерархия наследования для класса QDialogButtonBox:
(QObject, QPaintDevice) - QWidget - QDialogButtonBox
Форматы конструктора класса QDialogButtonBox:
<Объект> = QDialogButtonBox([parent=None])
<Объект> = QDialogButtonBox(<Ориентация>[, parent=None])
<Объект> = QDialogButtonBox(<Стандартные кнопки>[, parent=None])
<Объект> = QDialogButtonBox (<Стандартные кнопки>, <Ориентация> [, parent=None])
В параметре parent может быть указана ссылка на родительский компонент. Параметр <Ориентация> задает порядок расположения кнопок внутри контейнера. В качестве
значения указываются атрибуты Horizontal (по горизонтали - значение по умолчанию) или Vertical (по вертикали) класса QtCore.Qt. В параметре <Стандартные кнопки> указываются следующие атрибуты
(или их комбинация через оператор |) класса QDialogButtonBox:
- NoButton - кнопки не установлены;
- Ok - кнопка ОК с ролью AcceptRole;
- Cancel - кнопка Cancel с ролью RejectRole;
- Yes - кнопка Yes с ролью YesRole;
- YesToAll - кнопка Yes to All с ролью YesRole;
- No - кнопка No с ролью NoRole;
- NoToAll - кнопка No to All с ролью NoRole;
- Open - кнопка Open с ролью AcceptRole;
- Close - кнопка Close с ролью RejectRole;
- Save - кнопка Save с ролью AcceptRole;
- SaveAll - кнопка Save All с ролью AcceptRole;
- Discard - кнопка Discard или Don't Save (надпись на кнопке зависит от операционной системы) с ролью DestructiveRole;
- Apply - кнопка Apply с ролью ApplyRole;
- Reset - кнопка Reset с ролью ResetRole;
- RestoreDefaults - кнопка Restore Defaults с ролью ResetRole;
- Help - кнопка Help с ролью HelpRole;
- Abort - кнопка Abort с ролью RejectRole;
- Retry - кнопка Retry с ролью AcceptRole;
- Ignore - кнопка Ignore с ролью AcceptRole.
Класс QDialogButtonBox наследует все методы из базовых классов и поддерживает следующие дополнительные методы (здесь приведены только интересующие нас - полный их список доступен на странице
https://doc.qt.io/qt-5/qdialogbuttonbox.html):
- setOrientation (<Ориентация>) - задает порядок расположения кнопок внутри контейнера. В качестве значения указываются атрибуты Horizontal (по горизонтали) или
Vertical (по вертикали) класса QtCore.Qt;
- setStandardButtons (<Стандартные кнопки>) - добавляет в контейнер стандартные кнопки. Пример:
self.box.setStandardButtons(QtWidgets.QDialogButtonBox.Ok |
QtWidgets.QDialogButtonBox.Cancel)
- addButton () - добавляет кнопку в контейнер. Форматы метода:
addButton(<Стандартная кнопка>)
addButton(<Текст>, <Роль>)
addButton(<QAbstractButton>, <Роль>)
Первый формат добавляет стандартную кнопку или кнопки - значение параметра должно представлять собой один из рассмотренных ранее атрибутов класса QDialogButtonBox или их
комбинацию через оператор |. Второй формат принимает в качестве первого параметра надпись для добавляемой кнопки, а в качестве второго - ее роль. Третий формат принимает добавляемую кнопку
в виде экземпляра одного из классов-потомков класса QAbstractButton - как правило, класса QPushButton, представляющего обычную кнопку.
В качестве роли указывается один из следующих атрибутов класса QDialogButtonBox:
- InvalidRole (или -1) - ошибочная роль;
- AcceptRole (или 0) - нажатие кнопки устанавливает код возврата равным значению атрибута Accepted;
- RejectRole (или 1) - нажатие кнопки устанавливает код возврата равным значению атрибута Rejected;
- DestructiveRole (или 2) - кнопка для отказа от изменений;
- ActionRole (или 3) - нажатие кнопки приводит к выполнению операции, которая не связана с закрытием окна;
- HelpRole (или 4) - кнопка для отображения справки;
- YesRole (или 5) - кнопка Yes;
- NoRole (или 6) - кнопка No;
- ResetRole (или 7) - кнопка для установки значений по умолчанию;
- ApplyRole (или 8) - кнопка для принятия изменений.
Если роль недействительна, кнопка добавлена не будет.
Первый и второй форматы возвращают ссылку на сгенерированную и добавленную в контейнер кнопку, третий не возвращает ничего. Пример:
self.btnYes = QtWidget.QPushButton("&Да")
self.box.addButton(self.btnYes, QtWidget.QDialogButtonBox.AcceptRole)
self.btnNo = self.box.addButton(QtWidget.QDialogButtonBox.No)
self.btnCancel = self.box.addButton("&Cancel",
QtWidget.QDialogButtonBox.RejectRole)
- button (<Стандартная кнопка>) - возвращает ссылку на стандартную кнопку, соответствующую указанному обозначению, или None, если такой стандартной кнопки нет;
- standardButton (<QAbstractButton>) - возвращает обозначение стандартной кнопки, переданной в качестве параметра, или значение атрибута NoButton, если такой кнопки в контейнере нет;
- buttonRole (<QAbstractButton>) - возвращает роль указанной в параметре кнопки. Если такая кнопка отсутствует, возвращается значение атрибута InvalidRole;
- buttons () - возвращает список со ссылками на все кнопки, которые были добавлены в контейнер;
- standardButtons () - возвращает комбинацию обозначений всех стандартных кнопок, добавленных в контейнер;
- removeButton (<QAbstractButton>) - удаляет кнопку из контейнера, при этом не удаляя объект кнопки;
- clear () - очищает контейнер и удаляет все кнопки;
- setCenterButtons (<Флаг>) - если в качестве параметра указано значение True, кнопки будут выравниваться по центру контейнера.
Класс QDialogButtonBox поддерживает следующие сигналы:
- accepted () - генерируется при нажатии кнопки с ролью AcceptRole или YesRole. Этот сигнал можно соединить со слотом accept () объекта диалогового окна. Пример:
self.box.accepted.connect(self.accept)
- rejected () - генерируется при нажатии кнопки с ролью RejectRole или NoRole. Этот сигнал можно соединить со слотом reject() объекта диалогового окна. Пример:
self.box.rejected.connect(self.reject)
- helpRequested () - генерируется при нажатии кнопки с ролью HelpRole;
- clicked (<QAbstractButton>) - генерируется при нажатии любой кнопки внутри контейнера. Внутри обработчика через параметр доступна ссылка на кнопку.
На следующем шаге мы рассмотрим класс QMessageBox.
Предыдущий шаг
Содержание
Следующий шаг