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

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


Скачать 7.92 Mb.
НазваниеНиколай Прохоренок Владимир Дронов
Дата05.05.2023
Размер7.92 Mb.
Формат файлаpdf
Имя файлаПрохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен.pdf
ТипДокументы
#1111379
страница58 из 83
1   ...   54   55   56   57   58   59   60   61   ...   83
, всегда будет модальным, — независимо от значения, заданного вызовом метода setModal()
. Чтобы диалоговое окно было не модальным, нужно ото- бражать его с помощью метода show()
или setVisible()
. После вызова этих методов

616
Часть II. Библиотека PyQt 5 следует вызвать методы raise_()
(чтобы поместить окно поверх всех окон) и activateWindow()
(чтобы сделать окно активным, т. е. имеющим фокус ввода).
Указать, что окно является модальным, позволяет также метод setWindowModality(<Флаг>)
класса
QWidget
. В качестве параметра могут быть указаны следующие атрибуты класса
QtCore.Qt
:

NonModal

0
— окно не является модальным;

WindowModal

1
— окно блокирует только родительские окна в пределах иерархии;

ApplicationModal

2
— окно блокирует все окна в приложении.
Окна, открытые из модального окна, не блокируются. Следует также учитывать, что метод setWindowModality()
должен быть вызван до отображения окна.
Получить текущее значение позволяет метод windowModality()
класса
QWidget
. Прове- рить, является ли окно модальным, можно с помощью метода isModal()
того же класса, который возвращает
True
, если окно является модальным, и
False
— в противном случае.
Класс
QDialog поддерживает следующие сигналы:
 accepted()
— генерируется при установке флага
Accepted
(нажата кнопка OK). Не гене- рируется при закрытии окна с помощью метода hide()
или setVisible()
;
 rejected()
— генерируется при установке флага
Rejected
(нажата кнопка Cancel, кноп- ка Закрыть в заголовке окна или клавиша ). Не генерируется при закрытии окна с помощью метода hide()
или setVisible()
;
 finished(<Код завершения>)
— генерируется при установке кода завершения пользова- телем или вызовом методов accept()
, reject()
и done()
. Внутри обработчика через па- раметр доступен целочисленный код завершения. Сигнал не генерируется при закрытии окна с помощью метода hide()
или setVisible()
Для всех кнопок, добавляемых в диалоговое окно, автоматически вызывается метод setAutoDefault()
со значением
True в качестве параметра. В этом случае кнопка может быть нажата с помощью клавиши при условии, что она находится в фокусе. По умолчанию нажать кнопку позволяет только клавиша <Пробел>.
С помощью метода setDefault()
можно указать кнопку по умолчанию. Эта кнопка может быть нажата с помощью клавиши , когда фокус ввода установлен на другой компо- нент — например, на текстовое поле.
26.2. Класс QDialogButtonBox
Класс
QDialogButtonBox представляет контейнер, в который можно добавить различные кнопки: как стандартные, так и пользовательские. Внешний вид контейнера и расположение кнопок в нем зависят от используемой операционной системы. Иерархия наследования для класса
QDialogButtonBox
:
(QObject, QPaintDevice) — QWidget — QDialogButtonBox
Форматы конструктора класса
QDialogButtonBox
:
<Объект> = QDialogButtonBox([parent=None])
<Объект> = QDialogButtonBox(<Ориентация>[, parent=None])
<Объект> = QDialogButtonBox(<Стандартные кнопки>[, parent=None])
<Объект> = QDialogButtonBox(<Стандартные кнопки>, <Ориентация>[, parent=None])

Глава 26. Диалоговые окна
617
В параметре parent может быть указана ссылка на родительский компонент. Параметр
<Ориентация>
задает порядок расположения кнопок внутри контейнера. В качестве значения указываются атрибуты
Horizontal
(по горизонтали — значение по умолчанию) или
Vertical
(по вертикали) класса
QtCore.Qt
. В параметре
<Стандартные кнопки>
указываются следующие атрибуты (или их комбинация через оператор
|
) класса
QDialogButtonBox
:

NoButton
— кнопки не установлены;

Ok
— кнопка 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(, <Роль>)

618
Часть II. Библиотека PyQt 5
Первый формат добавляет стандартную кнопку или кнопки (значение параметра должно представлять собой один из рассмотренных ранее атрибутов класса
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()
— возвращает обозначение стандартной кнопки, переданной в качестве параметра, или значение атрибута
NoButton
, если такой кнопки в контейнере нет;
 standardButtons()
— возвращает комбинацию обозначений всех стандартных кнопок, добавленных в контейнер;
 buttonRole()
— возвращает роль указанной в параметре кнопки. Если такая кнопка отсутствует, возвращается значение атрибута
InvalidRole
;
 buttons()
— возвращает список со ссылками на все кнопки, которые были добавлены в контейнер;

Глава 26. Диалоговые окна
619
 removeButton()
— удаляет кнопку из контейнера, при этом не удаляя объект кнопки;
 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()
— генерируется при нажатии любой кнопки внутри кон- тейнера. Внутри обработчика через параметр доступна ссылка на кнопку.
26.3. Класс QMessageBox
Класс
QMessageBox реализует стандартные окна-предупреждения для вывода сообщений.
Иерархия наследования:
(QObject, QPaintDevice) — QWidget — QDialog — QMessageBox
Форматы конструктора класса
QMessageBox
:
<Объект> = QMessageBox([parent=None])
<Объект> = QMessageBox(<Значок>, <Текст заголовка>, <Текст сообщения>[, buttons=NoButton][, parent=None][, flags=Dialog | MSWindowsFixedSizeDialogHint])
Если в параметре parent указана ссылка на родительское окно, диалоговое окно будет цен- трироваться относительно родительского окна, а не относительно экрана. Параметр flags задает тип окна (см. разд. 18.2). В параметре
<Значок>
могут быть указаны следующие атрибуты класса
QMessageBox
:

NoIcon

0
— нет значка;

Question

4
значок со знаком вопроса;

Information

1
— значок информационного сообщения;

Warning

2
— значок предупреждающего сообщения;

Critical

3
— значок критического сообщения.
В параметре buttons указываются следующие атрибуты (или их комбинация через опера- тор
|
) класса
QMessageBox
:

NoButton
— кнопки не установлены;

Ok
— кнопка OK с ролью
AcceptRole
;

Cancel
— кнопка Cancel с ролью
RejectRole
;

Yes
— кнопка Yes с ролью
YesRole
;

620
Часть II. Библиотека PyQt 5

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
После создания экземпляра класса следует вызвать метод exec()
(или оставленный для совместимости со старыми версиями PyQt метод exec_()
), чтобы вывести окно на экран.
Метод возвращает числовое обозначение нажатой кнопки: dialog = QtWidgets.QMessageBox(QtWidgets.QMessageBox.Critical,
"Текст заголовка", "Текст сообщения", buttons = QtWidgets.QMessageBox.Ok |
QtWidgets.QMessageBox.Cancel, parent=window) result = dialog.exec()
26.3.1. Основные методы и сигналы
Класс
QMessageBox наследует все методы базовых классов и поддерживает следующие дополнительные методы (полный их список можно найти на странице https://doc.qt.io/ qt-5/qmessagebox.html
):
 setIcon(<Значок>)
— устанавливает стандартный значок;
 setIconPixmap()
— устанавливает пользовательский значок. В качестве пара- метра указывается экземпляр класса
QPixmap
;
 setWindowTitle(<Текст заголовка>)
— задает текст заголовка окна;
 setText(<Текст сообщения>)
— задает текст сообщения. Можно указать как обычный текст, так и текст в формате HTML. Перенос строки в обычной строке осуществляется с помощью символа
\n
, а в строке в формате HTML — с помощью тега
;
 setInformativeText(<Текст>)
— задает дополнительный текст сообщения, который ото- бражается под обычным текстом сообщения. Можно указать как обычный текст, так и
HTML-код;

Глава 26. Диалоговые окна
621
 setDetailedText(<Текст>)
— задает текст подробного описания сообщения. Если он задан, в окно будет добавлена кнопка Show Details, с помощью которой можно отобра- зить скрытую панель с подробным описанием;
 setTextFormat(<Режим>)
— задает режим отображения текста сообщения. Могут быть указаны следующие атрибуты класса
QtCore.Qt
:

PlainText

0
— простой текст;

RichText

1
— форматированный текст;

AutoText

2
— автоматическое определение (режим по умолчанию). Если текст содержит HTML-теги, используется режим
RichText
, в противном случае — режим
PlainText
;
 setStandardButtons(<Стандартные кнопки>)
— добавляет стандартные кнопки: dialog.setStandardButtons(QtWidgets.QMessageBox.Ok |
QtWidgets.QMessageBox.Cancel)
 addButton()
— добавляет кнопку в окно. Форматы метода: addButton(<Стандартная кнопка>) addButton(<Текст>, <Роль>) addButton(, <Роль>)
Первый формат добавляет стандартную кнопку или кнопки (значение параметра должно быть одним из рассмотренных ранее атрибутов класса
QMessageBox или их комбинацией через оператор
|
). Второй формат принимает в качестве первого параметра надпись для добавляемой кнопки, а в качестве второго — ее роль. Третий формат принимает добавляемую кнопку в виде экземпляра одного из подклассов класса
QAbstractButton
— как правило, класса
QPushButton
, представляющего обычную кнопку.
В качестве роли указывается один из следующих атрибутов класса
QMessageBox
:

InvalidRole

-1
— ошибочная роль;

AcceptRole

0
— нажатие кнопки устанавливает код возврата равным значению атрибута
Accepted
;

RejectRole

1
— нажатие кнопки устанавливает код возврата равным значению атрибута
Rejected
;

DestructiveRole

2
— кнопка для отказа от изменений;

ActionRole

3
— нажатие кнопки приводит к выполнению операции, которая не связана с закрытием окна;

HelpRole

4
— кнопка для отображения справки;

YesRole

5
— кнопка Yes;

NoRole

6
— кнопка No;

ResetRole

7
— кнопка для установки значений по умолчанию;

ApplyRole

8
— кнопка для принятия изменений.
Если роль недействительна, кнопка добавлена не будет.
Первый и второй форматы возвращают ссылку на сгенерированную и добавленную в окно кнопку, третий не возвращает ничего:

622
Часть II. Библиотека PyQt 5 btnYes = QtWidgets.QPushButton("&Да") dialog.addButton(btnYes, QtWidgets.QMessageBox.AcceptRole) btnNo = dialog.addButton("&Нет", QtWidgets.QMessageBox.RejectRole) btnCancel = dialog.addButton(QtWidgets.QMessageBox.Cancel)
 setDefaultButton()
— задает кнопку по умолчанию, которая сработает при нажатии клавиши . Форматы метода: setDefaultButton(<Стандартная кнопка>) setDefaultButton()
 setEscapeButton()
— задает кнопку, которая сработает при нажатии клавиши .
Форматы метода: setEscapeButton(<Стандартная кнопка>) setEscapeButton()
 setCheckBox()
— задает флажок, который будет выводиться в окне. Чтобы убрать заданный ранее флажок, нужно передать значение
None
;
 checkBox()
— возвращает заданный в методе setCheckBox()
флажок или
None
, если тако- вого нет;
 clickedButton()
— возвращает ссылку на кнопку, которая была нажата, или значение
None
;
 button(<Стандартная кнопка>)
— возвращает ссылку на стандартную кнопку, соответст- вующую указанному обозначению, или
None
, если такой стандартной кнопки в контей- нере нет;
 standardButton()
— возвращает обозначение стандартной кнопки, переданной в качестве параметра, или значение атрибута
NoButton
, если такой кнопки в контейнере нет;
 standardButtons()
— возвращает комбинацию обозначений всех стандартных кнопок, добавленных в окно;
 buttonRole()
— возвращает роль указанной в параметре кнопки. Если такая кнопка отсутствует, метод возвращает значение атрибута
InvalidRole
;
 buttons()
— возвращает список со ссылками на все кнопки, которые были добавлены в окно;
 removeButton()
удаляет кнопку из окна, при этом не удаляя объект кнопки.
Класс
QMessageBox поддерживает сигнал buttonClicked(
1   ...   54   55   56   57   58   59   60   61   ...   83


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