【问题标题】:PyQT trouble passing filenames across QWizardPagePyQT 无法跨 QWizardPage 传递文件名
【发布时间】:2018-12-18 18:37:23
【问题描述】:

我试图让用户在一个 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): 参数 2 具有意外类型“str”

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

我已经查看了文档,但无法弄清楚,因此希望得到一些指导。谢谢。

【问题讨论】:

    标签: python pyqt pyqt5 qwizard qwizardpage


    【解决方案1】:

    您只能使用registerField() 方法将qproperty 传递给QWidget,在QFileDialog 的情况下这是不可能的,因为没有与选择关联的q-property,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)
    

    【讨论】:

      猜你喜欢
      • 2012-07-29
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 2016-04-13
      • 2014-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多