2017-08-27 29 views
0

的QWizard一個時隙我已經創建了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) 

但這不是工作

+0

你這是什麼想'QWizard()。next'是?它真的是你想要的嗎? – Trilarion

回答

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

非常感謝!你的代碼工作正常。 – Mace