我用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)
但这不起作用
答案 0 :(得分:0)
此连接应在QWizard
和QWizardPage
存在的上下文中完成,但在此之前我们必须将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_())