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)
我正在尝试让用户将文件上传到一个 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)