Ошибка 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)
Другие вопросы по тегам