在pyside中使用QWizard下一个插槽

时间:2017-08-27 09:29:19

标签: python pyqt pyside

我用Pyside创建了一个向导。 在一个页面上,我创建了一个新线程,它启动了一个安装程序。 安装程序准备就绪后,向导应自动前进,而不单击下一步按钮。

我已经阅读了pyside文档,现在我的理解是,QWizard有下一个功能。但是我该如何使用这个功能?

我的测试工作正常:

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()

当我尝试使用下一个功能时,我尝试:

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

还有:

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

但这不起作用

1 个答案:

答案 0 :(得分:0)

此连接应在QWizardQWizardPage存在的上下文中完成,但在此之前我们必须将QThread的创建移动到构造函数,例如在下面我在主要做的例子:

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_())