PyQT无法跨QWizardPage

时间:2018-07-10 20:16:36

标签: python pyqt pyqt5 qwizard qwizardpage

我试图让用户将一个文件上传到一个QWizardPage上的应用程序,然后能够在另一个QWizardPage上重用同一文件路径。但是,根据我的代码

class ExecutePage(QtWidgets.QWizardPage):
    def __init__(self,*args,**kwargs):
        super().__init__()

    def initializePage(self):
        self.setTitle("Choose file to execute")
        self.setSubTitle("Please choose a file to execute")
        self.myTextBox = QtWidgets.QTextEdit(self)
        self.myTextBox.setGeometry(QtCore.QRect(100, 0, 350, 50))

        self.uploader = QtWidgets.QPushButton("upload",self)
        self.uploader.clicked.connect(self.get_file_name)

    def get_file_name(self):
        self.name = QtWidgets.QFileDialog.getOpenFileName(self.uploader,'Choose File to Run')[0]
        self.registerField("file_name",self.name,"currentText")

class ConclusionPage(QtWidgets.QWizardPage):
    def __init__(self,*args,**kwargs):
        super().__init__()

    def initializePage(self):
        self.setSubTitle(self.field("file_name"))

我遇到错误

  

TypeError:registerField(self,str,QWidget,property:str = None,   changeSignal:PYQT_SIGNAL = 0):参数2具有意外的类型'str'

是否有一种简单的方法将这个特定的字符串(self.name)转换为QWidget,该QWidget可以传递到向导中的其他页面上(例如,在本示例中,传递到结论页面中的字幕字段)?

我已经仔细阅读了文档,但无法弄清楚,因此请多加注意。谢谢。

1 个答案:

答案 0 :(得分:1)

您只能使用registerField()方法将q属性传递给QWidget,在QFileDialog的情况下,这是不可能的,因为没有与选择相关的q属性getOpenFileName()是静态方法,获取对象是一项复杂的任务,有两种可能的解决方案,第一种是创建一个从QFileDialog继承并具有与选择相关联的qproperty的类。 python传递值的魔力。最后一个是我将要使用的方法。

class ExecutePage(QtWidgets.QWizardPage):
    ...
    def get_file_name(self):
        name, _ = QtWidgets.QFileDialog.getOpenFileName(self.uploader,'Choose File to Run')
        self.wizard().file_name = name

class ConclusionPage(QtWidgets.QWizardPage):
    ...
    def initializePage(self):
        if hasattr(self.wizard(), 'file_name'):
            self.setSubTitle(self.wizard().file_name)