ээдд. Прохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен. Николай Прохоренок Владимир Дронов
Скачать 7.92 Mb.
|
) , генерируемый при нажатии кнопки в окне. Внутри обработчика через параметр доступна ссылка на нажа- тую кнопку. 26.3.2. Окно информационного сообщения Помимо рассмотренных ранее, класс QMessageBox предлагает несколько статических мето- дов, выводящих типовые окна-предупреждения. Для вывода информационного сообщения предназначен статический метод information() Формат метода: information(<Родитель>, <Текст заголовка>, <Текст сообщения>[, buttons=Ok][, defaultButton=NoButton]) Глава 26. Диалоговые окна 623 В параметре <Родитель> указывается ссылка на родительское окно или значение None . Если указана ссылка, диалоговое окно будет центрироваться относительно родительского окна, а не относительно экрана. Необязательный параметр buttons позволяет указать стандартные кнопки (атрибуты, задающие стандартные кнопки, указываются через оператор | ). По умолчанию выводится кнопка OK. Параметр defaultButton назначает кнопку по умолча- нию. Метод information() возвращает числовое обозначение нажатой кнопки: QtWidgets.QMessageBox.information(window, "Текст заголовка", "Текст сообщения", buttons=QtWidgets.QMessageBox.Close, defaultButton=QtWidgets.QMessageBox.Close) Результат выполнения этого кода показан на рис. 26.1. Рис. 26.1. Информационное окно-предупреждение 26.3.3. Окно подтверждения Для вывода окна с запросом подтверждения каких-либо действий предназначен статиче- ский метод question() . Формат метода: question(<Родитель>, <Текст заголовка>, <Текст сообщения>[, buttons=Yes | No][, defaultButton=NoButton]) В параметре <Родитель> указывается ссылка на родительское окно или значение None . Если указана ссылка, диалоговое окно будет центрироваться относительно родительского окна, а не относительно экрана. Необязательный параметр buttons позволяет указать выводимые стандартные кнопки (атрибуты, задающие стандартные кнопки, указываются через опе- ратор | ). По умолчанию отображаются кнопки Yes и No. Параметр defaultButton назна- чает кнопку по умолчанию. Метод question() возвращает числовое обозначение нажатой кнопки: result = QtWidgets.QMessageBox.question(window, "Текст заголовка", "Вы действительно хотите выполнить действие?", buttons=QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No | QtWidgets.QMessageBox.Cancel, defaultButton=QtWidgets.QMessageBox.Cancel) Результат выполнения этого кода показан на рис. 26.2. Рис. 26.2. Окно запроса подтверждения 624 Часть II. Библиотека PyQt 5 26.3.4. Окно предупреждающего сообщения Для вывода окна с предупреждающим сообщением предназначен статический метод warning() . Формат метода: warning(<Родитель>, <Текст заголовка>, <Текст сообщения>[, buttons=Ok][, defaultButton=NoButton]) В параметре <Родитель> указывается ссылка на родительское окно или значение None . Если указана ссылка, диалоговое окно будет центрироваться относительно родительского окна, а не относительно экрана. Необязательный параметр buttons позволяет указать выводимые стандартные кнопки (атрибуты, задающие стандартные кнопки, указываются через опера- тор | ). По умолчанию отображается кнопка OK. Параметр defaultButton назначает кнопку по умолчанию. Метод warning() возвращает числовое обозначение нажатой кнопки: result = QtWidgets.QMessageBox.warning(window, "Текст заголовка", "Действие может быть опасным. Продолжить?", buttons=QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No | QtWidgets.QMessageBox.Cancel, defaultButton=QtWidgets.QMessageBox.Cancel) Результат выполнения этого кода показан на рис. 26.3. Рис. 26.3. Окно предупреждающего сообщения 26.3.5. Окно критического сообщения Для вывода окна с критическим сообщением предназначен статический метод critical() Формат метода: critical(<Родитель>, <Текст заголовка>, <Текст сообщения>[, buttons=Ok][, defaultButton=NoButton]) В параметре <Родитель> указывается ссылка на родительское окно или значение None . Если указана ссылка, диалоговое окно будет центрироваться относительно родительского окна, а не относительно экрана. Необязательный параметр buttons позволяет указать выводящие- ся на экран стандартные кнопки (атрибуты, задающие стандартные кнопки, указываются через оператор | ). По умолчанию отображается кнопка OK. Параметр defaultButton назна- чает кнопку по умолчанию. Метод critical() возвращает числовое обозначение нажатой кнопки: QtWidgets.QMessageBox.critical(window, "Текст заголовка", "Программа выполнила недопустимую ошибку и будет закрыта", defaultButton=QtWidgets.QMessageBox.Ok) Результат выполнения этого кода показан на рис. 26.4. Глава 26. Диалоговые окна 625 Рис. 26.4. Окно критического сообщения 26.3.6. Окно сведений о программе Для вывода окна со сведениями о программе и авторских правах ее разработчиков предна- значен статический метод about() . Формат метода: about(<Родитель>, <Текст заголовка>, <Текст сообщения>) В параметре <Родитель> указывается ссылка на родительское окно или значение None . Если указана ссылка, диалоговое окно будет центрироваться относительно родительского окна, а не относительно экрана. Слева от текста сообщения отображается значок приложения (см. разд. 18.9), если он был установлен: QtWidgets.QMessageBox.about(window, "Текст заголовка", "Описание программы") 26.3.7. Окно сведений о библиотеке Qt Для вывода окна с описанием используемой версии библиотеки Qt предназначен статиче- ский метод aboutQt() . Формат метода: aboutQt(<Родитель>[, title=""]) Рис. 26.5. Окно сведений о библиотеке Qt 626 Часть II. Библиотека PyQt 5 В параметре <Родитель> указывается ссылка на родительское окно или значение None . Если указана ссылка, диалоговое окно будет центрироваться относительно родительского окна, а не относительно экрана. В параметре title можно указать текст, выводимый в заголовке окна. Если параметр не указан, то выводится заголовок About Qt: QtWidgets.QMessageBox.aboutQt(window, title="О библиотеке Qt") Результат выполнения этого кода показан на рис. 26.5. 26.4. Класс QInputDialog Класс QInputDialog представляет модальные диалоговые окна для ввода различных данных. Иерархия наследования для этого класса выглядит так: (QObject, QPaintDevice) — QWidget — QDialog — QInputDialog Формат конструктора класса QInputDialog : <Объект> = QInputDialog([parent=None][, flags=0]) Если в параметре parent указана ссылка на родительское окно, диалоговое окно будет цен- трироваться относительно родительского окна, а не относительно экрана. Параметр flags задает тип окна (см. разд. 18.2). После создания экземпляра класса следует вызвать метод exec() (или exec_() , оставленный для совместимости с предыдущими версиями PyQt), чтобы отобразить окно. Метод возвра- щает код возврата в виде значения следующих атрибутов класса QDialog : Accepted или Rejected Вот пример отображения диалогового окна и обработки статуса внутри обработчика нажа- тия кнопки: def on_clicked(): dialog = QtWidgets.QInputDialog(window) result = dialog.exec_() if result == QtWidgets.QDialog.Accepted: print("Нажата кнопка OK") # Здесь получаем данные из диалогового окна else: print("Нажата кнопка Cancel") 26.4.1. Основные методы и сигналы Класс QInputDialog наследует все методы базовых классов и добавляет к ним следующие собственные методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qinputdialog.html): setLabelText(<Текст>) — задает текст, отображаемый над полем ввода; setOkButtonText(<Текст>) — задает текст надписи для кнопки OK: dialog.setOkButtonText("&Ввод") setCancelButtonText(<Текст>) — задает текст надписи для кнопки Cancel: dialog.setCancelButtonText("&Отмена") Глава 26. Диалоговые окна 627 setInputMode(<Режим>) — задает режим ввода данных. В качестве параметра указывают- ся следующие атрибуты класса QInputDialog : • TextInput — 0 — ввод текста; • IntInput — 1 — ввод целого числа; • DoubleInput — 2 — ввод вещественного числа; setTextEchoMode(<Режим>) — задает режим отображения текста в поле. Могут быть ука- заны следующие атрибуты класса QLineEdit : • Normal — 0 — показывать символы как они были введены; • NoEcho — 1 — не показывать вводимые символы; • Password — 2 — вместо любого символа выводится звездочка ( * ); • PasswordEchoOnEdit — 3 — показывать символы при вводе, а при потере фокуса вме- сто них отображать звездочки; setTextValue(<Текст>) — задает текст по умолчанию, отображаемый в текстовом поле; textValue() — возвращает текст, введенный в текстовое поле; setIntValue(<Значение>) — задает целочисленное значение при использовании режима IntInput ; intValue() — возвращает целочисленное значение, введенное в поле, при использова- нии режима IntInput ; setIntRange(<Минимум>, <Максимум>) , setIntMinimum(<Минимум>) и setIntMaximum( <Максимум>) — задают диапазон допустимых целочисленных значений при использова- нии режима IntInput ; setIntStep(<Шаг>) — задает шаг приращения значения при нажатии кнопок со стрелка- ми в правой части поля при использовании режима IntInput ; setDoubleValue(<Значение>) — задает вещественное значение при использовании режи- ма DoubleInput ; doubleValue() — возвращает вещественное значение, введенное в поле, при использова- нии режима DoubleInput ; setDoubleRange(<Минимум>, <Максимум>) , setDoubleMinimum(<Минимум>) и setDoubleMaximum(<Максимум>) — задают диапазон допустимых вещественных значений при использовании режима DoubleInput ; setDoubleDecimals(<Значение>) — задает количество цифр после десятичной точки при использовании режима DoubleInput ; setComboBoxItems(<Список строк>) — задает пункты, которые будут присутствовать в раскрывающемся списке, выводящемся в этом случае вместо обычного поля ввода. Набор пунктов указывается в виде списка строк; setComboBoxEditable(<Флаг>) — если в качестве параметра указано значение True , поль- зователь сможет ввести произвольное значение в раскрывающийся список, как если бы он был обычным полем ввода; setOption(<Опция>[, on=True]) — если во втором параметре указано значение True , за- данная в первом параметре опция будет установлена, а если False — сброшена. Опции указываются в виде следующих атрибутов класса QInputDialog : 628 Часть II. Библиотека PyQt 5 • NoButtons — 1 — не выводить кнопки OK и Cancel; • UseListViewForComboBoxItems — 2 — для отображения списка строк будет использо- ваться класс QListView (обычный список), а не QComboBox (раскрывающийся список); • UsePlainTextEditForTextInput — 4 — вместо класса QLineEdit (однострочное тек- стовое поле) будет использован класс QPlainTextEdit (многострочное поле для ввода обычного текста); setOptions(<Опции>) — устанавливает несколько опций (см. описание метода setOption() ) сразу. Класс QInputDialog поддерживает сигналы: textValueChanged(<Значение>) — генерируется при изменении значения в текстовом поле. Внутри обработчика через параметр доступно новое значение в виде строки. Сиг- нал генерируется при использовании режима TextInput ; textValueSelected(<Значение>) — генерируется при нажатии кнопки OK. Внутри обра- ботчика через параметр доступно введенное значение в виде строки. Сигнал генерирует- ся при использовании режима TextInput ; intValueChanged(<Значение>) — генерируется при изменении значения в поле. Внутри обработчика через параметр доступно новое значение в виде целого числа. Сигнал гене- рируется при использовании режима IntInput ; intValueSelected(<Значение>) — генерируется при нажатии кнопки OK. Внутри обра- ботчика через параметр доступно введенное значение в виде целого числа. Сигнал гене- рируется при использовании режима IntInput ; doubleValueChanged(<Значение>) — генерируется при изменении значения в поле. Внут- ри обработчика через параметр доступно новое значение в виде вещественного числа. Сигнал генерируется при использовании режима DoubleInput ; doubleValueSelected(<Значение>) — генерируется при нажатии кнопки OK. Внутри об- работчика через параметр доступно введенное значение в виде вещественного числа. Сигнал генерируется при использовании режима DoubleInput 26.4.2. Окно для ввода строки Класс QInputDialog также поддерживает несколько статических методов, реализующих ти- повые диалоговые окна. Окно для ввода обычной строки или пароля выводится вызовом статического метода getText() . Формат метода: getText(<Родитель>, <Текст заголовка>, <Текст подсказки>[, echo=Normal][, text=""][, flags=0][, inputMethodHints=QtCore.Qt.ImhNone]) В параметре <Родитель> указывается ссылка на родительское окно или значение None . Если указана ссылка, диалоговое окно будет центрироваться относительно родительского окна, а не экрана. Необязательный параметр echo задает режим отображения текста в поле (см. описание метода setTextEchoMode() в разд. 26.4.1). Параметр text устанавливает зна- чение поля по умолчанию, а в параметре flags можно указать тип окна. Параметр inputMethodHints указывает дополнительные опции текстового поля, которое будет присутствовать в выведенном окне. В качестве его значения можно указать один из Глава 26. Диалоговые окна 629 многочисленных атрибутов класса QtCore.Qt , список которых приведен на странице https://doc.qt.io/qt-5/qt.html#InputMethodHint-enum , или их комбинацию через опера- тор | Метод getText() возвращает кортеж из двух элементов: (<Значение>, <Статус>) . Через первый элемент доступно введенное значение, а через второй — значение True , если была нажата кнопка OK, или значение False , если были нажаты кнопка Cancel, клавиша "Это текст подсказки", text="Значение по умолчанию") if ok: print("Введено значение:", s) Результат выполнения этого кода показан на рис. 26.6. Рис. 26.6. Окно для ввода строки Рис. 26.7. Окно для ввода целого числа 26.4.3. Окно для ввода целого числа Окно для ввода целого числа реализуется с помощью статического метода getInt() . Фор- мат метода: getInt(<Родитель>, <Текст заголовка>, <Текст подсказки>[, value=0][, min=-2147483647][, max=2147483647][, step=1][, flags=0]) В параметре <Родитель> указывается ссылка на родительское окно или значение None . Если указана ссылка, диалоговое окно будет центрироваться относительно родительского окна, а не относительно экрана. Необязательный параметр value устанавливает значение поля по умолчанию. Параметр min задает минимальное значение, параметр max — максимальное значение, а параметр step — шаг приращения. Параметр flags позволяет указать тип окна. Методы возвращают кортеж из двух элементов: (<Значение>, <Статус>) . Через первый элемент доступно введенное значение, а через второй — значение True , если была нажата кнопка OK, или значение False , если были нажаты кнопка Cancel, клавиша "Это текст подсказки", value=50, min=0, max=100, step=2) if ok: print("Введено значение:", n) Результат выполнения этого кода показан на рис. 26.7. 630 Часть II. Библиотека PyQt 5 26.4.4. Окно для ввода вещественного числа Окно для ввода вещественного числа реализуется с помощью статического метода getDouble() . Формат метода: getDouble(<Родитель>, <Текст заголовка>, <Текст подсказки>[, value=0][, min=-2147483647][, max=2147483647][, decimals=1][, flags=0]) В параметре <Родитель> указывается ссылка на родительское окно или значение None . Если указана ссылка, диалоговое окно будет центрироваться относительно родительского окна, а не относительно экрана. Необязательный параметр value устанавливает значение поля по умолчанию. Параметр min задает минимальное значение, параметр max — максимальное значение, а параметр decimals — количество цифр после десятичной точки. Параметр flags позволяет указать тип окна. Метод возвращает кортеж из двух элементов: (<Значение>, <Статус>) . Через первый элемент доступно введенное значение, а через второй элемент — значение True , если была нажата кнопка OK, или значение False , если были нажаты кнопка Cancel , клавиша "Это текст подсказки", value=50.0, min=0.0, max=100.0, decimals=2) if ok: print("Введено значение:", n) 26.4.5. Окно для выбора пункта из списка Окно для выбора пункта из списка выводится статическим методом getItem() . Формат ме- тода: getItem(<Родитель>, <Текст заголовка>, <Текст подсказки>, <Список строк>[, current=0][, editable=True][, flags=0][, inputMethodHints=QtCore.Qt.ImhNone]) В параметре <Родитель> указывается ссылка на родительское окно или значение None . Если указана ссылка, диалоговое окно будет центрироваться относительно родительского окна, а не относительно экрана. Необязательный параметр current устанавливает индекс пункта, выбранного по умолчанию. Если в параметре editable указано значение True , пользователь может ввести произвольное значение в список вручную. Параметр flags позволяет указать тип окна. Параметр inputMethodHints указывает дополнительные опции списка, который будет при- сутствовать в выведенном окне, — этот параметр имеет смысл указывать только в том случае, если для параметра editable задано значение |