我试图让用户将一个文件上传到一个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可以传递到向导中的其他页面上(例如,在本示例中,传递到结论页面中的字幕字段)?
我已经仔细阅读了文档,但无法弄清楚,因此请多加注意。谢谢。
答案 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)