PyQt has a QWizard class for creating a multipage wizard.

In the QWizard class, there is a method

registerField(<Бвойство>, [, property=None][,changedSignal=0]) 

which, as stated in the documentation:

"registers a property with which you can access the component value from any page of the wizard"

in the example below (listing from the book Prohorenok Python 3 ...) I get the value

 print from page 2 = None 

even on the same page

How to get access to the field registered with registerField on another page of the wizard?

in the on_clicked () method of the Start class all values ​​are printed without problems

 from PyQt5 import QtWidgets import sys class MyPage1(QtWidgets.QWizardPage): def __init__(self, parent=None): QtWidgets.QWizardPage.__init__(self, parent) self.setTitle("НазваниС страницы 1") self.label1 = QtWidgets.QLabel("Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ страницы 1") self.line1 = QtWidgets.QLineEdit() self.box1 = QtWidgets.QVBoxLayout() self.box1.addWidget(self.label1) self.box1.addWidget(self.line1) self.setLayout(self.box1) self.registerField("line1*", self.line1) class MyPage2(QtWidgets.QWizardPage): def __init__(self, parent=None): QtWidgets.QWizardPage.__init__(self, parent) self.setTitle("НазваниС страницы 2") self.setSubTitle("ВСкст ΠΏΠΎΠ΄Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°") self.label2 = QtWidgets.QLabel("Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ страницы 2") self.line2 = QtWidgets.QLineEdit() self.box2 = QtWidgets.QVBoxLayout() self.box2.addWidget(self.label2) self.box2.addWidget(self.line2) self.setLayout(self.box2) self.registerField("line2*", self.line2) temp = self.field('line2') print('print from page 2 = ', temp) class MyPage3(QtWidgets.QWizardPage): def __init__(self, parent=None): QtWidgets.QWizardPage.__init__(self, parent) self.setTitle("НазваниС страницы 3") self.setSubTitle("ВСкст ΠΏΠΎΠ΄Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°") self.label3 = QtWidgets.QLabel("Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ страницы 3") self.line3 = QtWidgets.QLineEdit() self.box3 = QtWidgets.QVBoxLayout() self.box3.addWidget(self.label3) self.box3.addWidget(self.line3) self.setLayout(self.box3) self.registerField("line3*", self.line3) class MyWizard(QtWidgets.QWizard): def __init__(self, parent=None): QtWidgets.QWizard.__init__(self, parent) self.setWindowTitle("Мой мастСр") self.setWizardStyle(QtWidgets.QWizard.ClassicStyle) self.page1 = MyPage1() self.page2 = MyPage2() self.page3 = MyPage3() self.idPage1 = self.addPage(self.page1) self.idPage2 = self.addPage(self.page2) self.idPage3 = self.addPage(self.page3) class Start(): @staticmethod def on_clicked(): wizard = MyWizard(window) result = wizard.exec() if result == QtWidgets.QDialog.Accepted: print("НаТата ΠΊΠ½ΠΎΠΏΠΊΠ° Finish") print(wizard.field("line1")) print(wizard.field("line2")) print(wizard.field("line3")) else: print("НаТата ΠΊΠ½ΠΎΠΏΠΊΠ° Cancel, ΠΊΠ½ΠΎΠΏΠΊΠ° Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ клавиша <Esc>", result) start = Start() app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QWidget() window.setWindowTitle("Класс QWizard") window.resize(300, 70) button = QtWidgets.QPushButton("ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ...") button.clicked.connect(start.on_clicked) box = QtWidgets.QVBoxLayout() box.addWidget(button) window.setLayout(box) window.show() sys.exit(app.exec_()) 

    1 answer 1

    It turns out that access to field () would work if you need to override the initializePage() method, according to the documentation:

    initializePage (self) - this method should be redefined in a class that inherits the QWizardPage class, if it is necessary to configure the properties of components based on the data entered on previous pages. The method is called when you click the Next button on the previous page, but before the next page is displayed.

    Working example:

     from PyQt5 import QtWidgets import sys from PyQt5.QtWidgets import QWizard from PyQt5.QtWidgets import QWizardPage class MyPage1(QtWidgets.QWizardPage): def __init__(self, parent=None): QtWidgets.QWizardPage.__init__(self, parent) self.setTitle("НазваниС страницы 1") self.label1 = QtWidgets.QLabel("Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ страницы 1") self.line1 = QtWidgets.QLineEdit() self.box1 = QtWidgets.QVBoxLayout() self.box1.addWidget(self.label1) self.box1.addWidget(self.line1) self.setLayout(self.box1) self.registerField("line1*", self.line1) class MyPage2(QtWidgets.QWizardPage): def __init__(self, parent=None): QtWidgets.QWizardPage.__init__(self, parent) # QWizardPage.initializePage(self) self.setTitle("НазваниС страницы 2") self.setSubTitle("ВСкст ΠΏΠΎΠ΄Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°") self.label2 = QtWidgets.QLabel("Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ страницы 2") self.line2 = QtWidgets.QLineEdit() self.box2 = QtWidgets.QVBoxLayout() self.box2.addWidget(self.label2) self.box2.addWidget(self.line2) self.setLayout(self.box2) self.registerField("line2", self.line2) self.initializePage() def initializePage(self): path = self.field("line1") print('print from function = ', path) class MyPage3(QtWidgets.QWizardPage): def __init__(self, parent=None): QtWidgets.QWizardPage.__init__(self, parent) self.setTitle("НазваниС страницы 3") self.setSubTitle("ВСкст ΠΏΠΎΠ΄Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°") self.label3 = QtWidgets.QLabel("Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ страницы 3") self.line3 = QtWidgets.QLineEdit() self.box3 = QtWidgets.QVBoxLayout() self.box3.addWidget(self.label3) self.box3.addWidget(self.line3) self.setLayout(self.box3) self.registerField("line3", self.line3) class MyWizard(QtWidgets.QWizard): def __init__(self, parent=None): QtWidgets.QWizard.__init__(self, parent) self.setWindowTitle("Мой мастСр") self.setWizardStyle(QtWidgets.QWizard.ClassicStyle) self.page1 = MyPage1() self.page2 = MyPage2() self.page3 = MyPage3() self.idPage1 = self.addPage(self.page1) self.idPage2 = self.addPage(self.page2) self.idPage3 = self.addPage(self.page3) class Start(): pass def on_clicked(): wizard = MyWizard(window) result = wizard.exec() field_page_2 = wizard.field("line2") if result == QtWidgets.QDialog.Accepted: print("НаТата ΠΊΠ½ΠΎΠΏΠΊΠ° Finish") print(wizard.field("line1")) print(wizard.field("line2")) print(wizard.field("line3")) else: print("НаТата ΠΊΠ½ΠΎΠΏΠΊΠ° Cancel, ΠΊΠ½ΠΎΠΏΠΊΠ° Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ клавиша <Esc>", result) start = Start() app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QWidget() window.setWindowTitle("Класс QWizard") window.resize(300, 70) button = QtWidgets.QPushButton("ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ...") button.clicked.connect(on_clicked) box = QtWidgets.QVBoxLayout() box.addWidget(button) window.setLayout(box) window.show() sys.exit(app.exec_())