PyQT 无法跨 QWizardPage 传递文件名

PyQT trouble passing filenames across 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, changedSignal: PYQT_SIGNAL = 0): argument 2 has unexpected type 'str'

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

我已经查看了文档,但无法弄明白,所以希望得到一些指示。谢谢。

您只能使用registerField()方法将q属性传递给QWidget,在QFileDialog的情况下是不可能的,因为没有q- 属性 与选择关联 getOpenFileName() 是静态方法,获取对象是一项复杂的任务,有 2 种可能的解决方案,第一种是创建一个 class 继承自 QFileDialog 并且有一个与选择关联的 q属性 或使用 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)