How can I connect a page's function to a qwizard's next button?

2.5k views Asked by At

I have been looking at this example. I wrote my code based on it but I still can't figure out how to connect the qwizard's next button. For example, I'd like it to print the page's name and number everytime the next button is clicked. Same with the finish button, when finish is clicked I would like it to print "finish!" on the console, mainly to know how to connect those buttons to execute a function in one of the pages.

1

There are 1 answers

1
eyllanesc On BEST ANSWER

You can get the buttons through the function {your wizard}.button({type button}), where button types can be:

  • QtGui.QWizard.BackButton
  • QtGui.QWizard.NextButton
  • QtGui.QWizard.CommitButton
  • QtGui.QWizard.FinishButton
  • QtGui.QWizard.CancelButton
  • QtGui.QWizard.HelpButton
  • QtGui.QWizard.CustomButton1
  • QtGui.QWizard.CustomButton2
  • QtGui.QWizard.CustomButton3

Code:

from PyQt4 import QtGui


def createIntroPage():
    page = QtGui.QWizardPage()
    page.setTitle("Introduction")

    label = QtGui.QLabel("This wizard will help you register your copy of "
            "Super Product Two.")
    label.setWordWrap(True)

    layout = QtGui.QVBoxLayout()
    layout.addWidget(label)
    page.setLayout(layout)

    return page


def createRegistrationPage():
    page = QtGui.QWizardPage()
    page.setTitle("Registration")
    page.setSubTitle("Please fill both fields.")

    nameLabel = QtGui.QLabel("Name:")
    nameLineEdit = QtGui.QLineEdit()

    emailLabel = QtGui.QLabel("Email address:")
    emailLineEdit = QtGui.QLineEdit()

    layout = QtGui.QGridLayout()
    layout.addWidget(nameLabel, 0, 0)
    layout.addWidget(nameLineEdit, 0, 1)
    layout.addWidget(emailLabel, 1, 0)
    layout.addWidget(emailLineEdit, 1, 1)
    page.setLayout(layout)

    return page


def createConclusionPage():
    page = QtGui.QWizardPage()
    page.setTitle("Conclusion")

    label = QtGui.QLabel("You are now successfully registered. Have a nice day!")
    label.setWordWrap(True)

    layout = QtGui.QVBoxLayout()
    layout.addWidget(label)
    page.setLayout(layout)

    return page


def backprint():
    print("Action: back Page: " + wizard.currentPage().title())

def nextprint():
    print("Action: next Page: " + wizard.currentPage().title())

def commitprint():
    print("Action: commit Page: " + wizard.currentPage().title())

def finishprint():
    print("Action:finish Page: " + wizard.currentPage().title())

def cancelprint():
    print("Action:cancel Page: " + wizard.currentPage().title())

if __name__ == '__main__':

    import sys

    app = QtGui.QApplication(sys.argv)

    wizard = QtGui.QWizard()

    wizard.addPage(createIntroPage())
    wizard.addPage(createRegistrationPage())
    wizard.addPage(createConclusionPage())

    wizard.button(QtGui.QWizard.BackButton).clicked.connect(backprint)
    wizard.button(QtGui.QWizard.NextButton).clicked.connect(nextprint)
    wizard.button(QtGui.QWizard.CommitButton).clicked.connect(commitprint)
    wizard.button(QtGui.QWizard.FinishButton).clicked.connect(finishprint)
    wizard.button(QtGui.QWizard.CancelButton).clicked.connect(cancelprint)

    wizard.setWindowTitle("Trivial Wizard")
    wizard.show()
    print("Page :" + wizard.currentPage().title())

    sys.exit(wizard.exec_())

Output:

Page :Introduction
Action: next Page: Registration
Action: next Page: Conclusion
Action: back Page: Registration
Action: back Page: Introduction
Action: next Page: Registration
Action: next Page: Conclusion
Action:finish Page: Conclusion