2015-07-12 67 views
0

如果用戶輸入了足夠的數據,是否有方法可以在嚮導的中途將下一個按鈕更改爲完成按鈕? 下面的例子使用HaveFinishButtonOnEarlyPages集 - 但是我想要做的是如果用戶選擇單選按鈕,用完成按鈕替換下一個按鈕。這可能嗎?pyQt QWizard旁邊的改變完成按鈕提前退出

from PyQt4 import QtGui 
from PyQt4.QtGui import QWizard 
import sys 

def createPage1(): 
    page = QtGui.QWizardPage() 
    page.setTitle("Page 1") 
    page.setSubTitle("Enter some data, if you don't want to enter any more data select finish early.") 
    essentialLabel = QtGui.QLabel("Essential data:") 
    essentialLineEdit = QtGui.QLineEdit() 
    finishEarlyRB = QtGui.QRadioButton("Select to finish wizard early") 
    layout = QtGui.QGridLayout() 
    layout.addWidget(essentialLabel, 0, 0) 
    layout.addWidget(essentialLineEdit, 0, 1) 
    layout.addWidget(finishEarlyRB, 1, 0) 
    page.setLayout(layout) 
    return page 

def createPage2(): 
    page = QtGui.QWizardPage() 
    page.setTitle("Page 2") 
    page.setSubTitle("Enter some more data.") 
    nonEssentialLabel = QtGui.QLabel("Non essential data:") 
    nonEssentialLineEdit = QtGui.QLineEdit() 
    layout = QtGui.QGridLayout() 
    layout.addWidget(nonEssentialLabel, 0, 0) 
    layout.addWidget(nonEssentialLineEdit, 0, 1) 
    page.setLayout(layout) 
    return page 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    wizard = QtGui.QWizard() 
    wizard.setOption(QWizard.HaveFinishButtonOnEarlyPages, on=True) 
    wizard.addPage(createPage1()) 
    wizard.addPage(createPage2()) 
    wizard.show() 
    sys.exit(wizard.exec_()) 
+1

從用戶體驗的角度來看,我會說它會更清晰地顯示完成按鈕和下一個按鈕,並在相關時啓用它。 – 101

回答

0

感謝無花果我記下這個,讓用戶有一個下一個和完成按鈕。當按照以下條件滿足頁面上的某些條件時,完成按鈕被啓用。

from PyQt4 import QtGui 
from PyQt4.QtGui import QWizard, QWizardPage 
import sys 

class TrialWizard(QWizard): 
    def __init__(self, parent = None): 
     super(QWizard, self).__init__(parent) 
     self.setOption(QWizard.HaveFinishButtonOnEarlyPages, on=True) 
     self.addPage(TrialWizardPage1(self)) 
     self.addPage(TrialWizardPage2(self)) 


class TrialWizardPage1(QWizardPage): 
    def __init__(self, parent): 
     super(TrialWizardPage1, self).__init__(parent) 
     self.setupUi() 
     self.connectSlots() 

    def setupUi(self): 
     self.setTitle("Page 1") 
     self.setSubTitle("Enter some data, if you don't want to enter any more data select finish early.") 
     essentialLabel = QtGui.QLabel("Essential data:") 
     self.essentialLineEdit = QtGui.QLineEdit() 
     self.finishEarlyRB = QtGui.QRadioButton("Select to finish wizard early") 
     layout = QtGui.QGridLayout() 
     layout.addWidget(essentialLabel, 0, 0) 
     layout.addWidget(self.essentialLineEdit, 0, 1) 
     layout.addWidget(self.finishEarlyRB, 1, 0) 
     self.setLayout(layout) 

    def isComplete(self): 
     if len(self.essentialLineEdit.text()) > 0: 
      return True 
     else: 
      return False 

    def connectSlots(self): 
     self.finishEarlyRB.clicked.connect(self.finishEarlyRBClicked) 

    def finishEarlyRBClicked(self): 
     if self.finishEarlyRB.isChecked(): 
      self.setFinalPage(True) 
      self.completeChanged.emit() 

class TrialWizardPage2(QWizardPage): 
    def __init__(self, parent): 
     super(TrialWizardPage2, self).__init__(parent) 
     self.setupUi() 

    def setupUi(self): 
     self.setTitle("Page 2") 
     self.setSubTitle("Enter some more data.") 
     nonEssentialLabel = QtGui.QLabel("Non essential data:") 
     nonEssentialLineEdit = QtGui.QLineEdit() 
     layout = QtGui.QGridLayout() 
     layout.addWidget(nonEssentialLabel, 0, 0) 
     layout.addWidget(nonEssentialLineEdit, 0, 1) 
     self.setLayout(layout) 

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    wizard = TrialWizard() 
    wizard.show() 
    sys.exit(app.exec_())