QWizardPage的父级在执行期间更改为QFrame,如何访问QWizard?

时间:2015-01-03 07:40:27

标签: python pyqt pyqt4

我想在QWizard中存储一些数据,然后从QWizardPages访问它。但是,当我尝试从QWizardPage访问数据时,它的父类型在代码执行期间从QWizard更改为QForm,因此我无法再以这种方式访问​​父数据。为什么会如此?如何从QWizard中的任何一个可靠地访问存储在父QWizardPages中的数据?

from PyQt4 import QtGui
from PyQt4.QtGui import QLabel, QVBoxLayout

class WizardExample(QtGui.QWizard):
    def __init__(self, parent=None):
        super(WizardExample, self).__init__(parent)
        self.setObjectName("WizardExample")
        self.setWindowTitle('Wizard example')
        #check data source once and store result
        self._dataExists = False
        self.addPage(Page1(self))

class Page1(QtGui.QWizardPage):
    def __init__( self, parent ):
        super(Page1, self).__init__(parent)
        layout = QVBoxLayout()
        self.setTitle('Page1')
        self.label = QLabel("Text entry... ")
        self.setObjectName("Page1")
        layout.addWidget(self.label)
        self.setLayout(layout)
        print("--__init__() parent()._dataExists: "+str(self.parent()._dataExists))
        self.printTypes()

    def printTypes(self):
        print(">>printTypes() self name: "+str(self.objectName())+" self type: "+str(type(self))+" parent name: "+self.parent().objectName()+" parent type: "+str(type(self.parent())))

    def isComplete(self): 
        print(">>isComplete()")
        self.printTypes()
        #fails on the following call
        if self.parent()._dataExists:
            return True
        else:
            return False

class AppWindow(QtGui.QMainWindow):
    def __init__( self, parent = None ):
        super(AppWindow, self).__init__(parent)

        wizard = WizardExample(self)
        wizard.exec_()


if ( __name__ == '__main__' ):
    app = None
    if ( not QtGui.QApplication.instance() ):
        app = QtGui.QApplication([])

    window = AppWindow()
    window.show()
    if ( app ):
        app.exec_()

1 个答案:

答案 0 :(得分:0)

由于您在创建页面时将QWizard的引用传递给QWizardPage,因此您可以存储此引用并稍后使用它(请参阅figs的注释)。

或者,您可以使用QWizard方法(在Avaris的评论中提及)从QWizardPage中访问wizard(),这可能是因为这个原因而添加的(父母在内部改变。)