Ошибка PyQT при передаче имен файлов через 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, свойство: str = None, changesSignal: PYQT_SIGNAL = 0): аргумент 2 имеет неожиданный тип 'str'
Есть ли простой способ конвертировать эту конкретную строку (self.name) в QWidget, который можно передать на другие страницы в мастере (т.е. в этом примере, в поле субтитров на странице заключения)?
Я просмотрел документацию, но не могу понять, поэтому был бы признателен за несколько указателей. Благодарю.
1 ответ
Вы можете использовать только registerField()
способ передать qproperty в QWidget
, в случае QFileDialog
это невозможно, так как с выбором также не связано q-свойство getOpenFileName()
является статическим методом, и получение объекта является сложной задачей. Существует 2 возможных решения, первое - создать класс, который наследуется от 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)