На этом шаге мы рассмотрим назначение, иерархию наследования, формат конструктора, основные свойства и пример использования этого компонента.
Класс QWizardPage описывает одну страницу в многостраничном мастере. Его иерархия наследования такова:
(QObject, QPaintDevice) - QWidget - QWizardPage
Формат конструктора класса QWizardPage:
<Объект> = QWizardPage([parent=None])
Класс QWizardPage наследует все методы базовых классов и, помимо них, поддерживает также следующие методы (здесь приведены только основные - полный их список доступен на странице https://doc.qt.io/qt-5/qwizardpage.html):
registerField(<Свойство>, <QWidget>[, property=None][,
changedSignal=0])
В параметре <Свойство> указывается произвольное название свойства в виде строки. Если в конце строки указать символ *, то компонент должен обязательно иметь значение (например, в поле должно быть введено какое-либо значение), иначе кнопки Next и Finish будут недоступны. Во втором параметре указывается ссылка на компонент. После регистрации свойства изменить значение компонента позволяет метод setField(), а получить значение - метод field().
В параметре property может быть указано свойство для получения и изменения значения, а в параметре changedSignal - сигнал, генерируемый при изменении значения.
Назначить эти параметры для определенного класса позволяет также метод
setDefaultProperty(<Название класса>, property, changedSignal)
Класс: | Свойство: | Сигнал: |
---|---|---|
QAbstractButton | checked | toggled() |
QAbstractSlider | value | valueChanged() |
QComboBox | currentIndex | currentIndexChanged() |
QDateTimeEdit | dateTime | dateTimeChanged() |
QLineEdit | text | textChanged() |
QListWidget | currentRow | currentRowChanged() |
QSpinBox | value | valueChanged() |
Приведем простейший пример использования рассмотренных компонентов.
# -*- coding: utf-8 -*- from PyQt5 import QtWidgets, QtCore import sys # Функция создания страницы регистрации def createRegistrationPage(): # Создание страницы регистрации page = QtWidgets.QWizardPage() page.setTitle("Регистрация") label = QtWidgets.QLabel("Здесь Вы регистрируетесь.") label.setWordWrap(True) layout = QtWidgets.QVBoxLayout() layout.addWidget(label) page.setLayout(layout) return page # Функция создания начальной страницы def createIntroPage(): page = QtWidgets.QWizardPage() page.setTitle("Начало") label = QtWidgets.QLabel("На следующей странице Вам нужно будет зарегистрироваться.") label.setWordWrap(True) layout = QtWidgets.QVBoxLayout() layout.addWidget(label) page.setLayout(layout) return page # Функция создания завершающей страницы def createConclusionPage(): page = QtWidgets.QWizardPage() page.setTitle("Результат") label = QtWidgets.QLabel("Вы успешно зарегистрировались. Хорошего дня!") label.setWordWrap(True) layout = QtWidgets.QVBoxLayout() layout.addWidget(label) page.setLayout(layout) return page if __name__ == '__main__': import sys app = QtWidgets.QApplication(sys.argv) wizard = QtWidgets.QWizard() wizard.addPage(createIntroPage()) wizard.addPage(createRegistrationPage()) wizard.addPage(createConclusionPage()) wizard.setWindowTitle("Простейший Wizard") wizard.show() sys.exit(app.exec_())
Результат работы приложения:
Рис.1. Результат работы приложения
Прокомментируем полученный результат.
Здесь создается три страницы мастера; каждой странице соответствует отдельная функция. По структуре эти функции одинаковы: создается страница, которая является экземпляром класса QWizardPage(). Затем настраивается внешний вид страницы, после чего созданная страница возвращается из функции.
В основной части создается объект класса QWizard() с именем wizard и методом addPage() в него добавляются возвращаемые из функций страницы. Затем можно задать параметры объекта wizard, после чего отобразить его на экране.
Со следующего шага мы начнем рассматривать создание SDI- и MDI-приложений.