Mace
Mace

Reputation: 32

Using the QWizard next slot in pyside

I've created a wizard with Pyside. On one page, I create a new thread, which starts an installer. When the installer is ready, the Wizard should go forward automatically, without clicking the next button.

I've read the pyside documentation, and now my understanding is, that QWizard has a next function. But how can I use this function?

My test is working fine:

from PySide.QtGui import *
from PySide.QtCore import *

...
...

class Install(QWizardPage):

def __init__(self, parent=None):
    super(Install, self).__init__(parent)

def initializePage(self):
    self.setTitle("Install")
    label = QLabel("Install")
    label.setWordWrap(True)
    layout = QVBoxLayout()
    self.progressBar = QProgressBar(self)
    self.progressBar.setRange(0,1)
    self.progressBar.setRange(0,0)
    layout.addWidget(self.progressBar)
    layout.addWidget(label)
    self.setLayout(layout)
    self.myTask = TaskThread()
    self.myTask.start()
    self.myTask.taskFinished.connect(self.Finished)

def Finished(self):
    print("finish")

def isComplete(self):
    return False


class TaskThread(QThread):
taskFinished = Signal()
def run(self):
    a = 0
    while a != 10000:
        print("test")
        a += 1
    self.taskFinished.emit()

And when I try to use the next function I try:

self.CallNext = QWizard().next
self.myTask.taskFinished.connect(self.CallNext)

And also:

self.myTask.taskFinished.connect(QWizard().next)

But this is not working

Upvotes: 1

Views: 320

Answers (1)

eyllanesc
eyllanesc

Reputation: 244311

This connection should be done in the context where the QWizard and QWizardPage exist, but before that we must move the creation of the QThread to the constructor, for example in the following example I do in the main:

class Install(QWizardPage):
    def __init__(self, parent=None):
        super(Install, self).__init__(parent)
        self.myTask = TaskThread()
    def initializePage(self):
        [...]
        self.setLayout(layout)

        self.myTask.start()

if __name__ == '__main__':

    import sys

    app = QApplication(sys.argv)

    wizard = QWizard()
    install = Install()
    install.setTitle("installer")
    install.myTask.taskFinished.connect(wizard.next)
    wizard.addPage(install)
    page = QWizardPage()
    page.setTitle("next Page")
    wizard.addPage(page)
    wizard.show()

    sys.exit(wizard.exec_())

Upvotes: 1

Related Questions