Поле регистрации мастера PyQt в виде строки, а не целого числа
Я пытаюсь создать Мастер с использованием PyQt5 и пытаюсь сделать так, чтобы ввод, введенный пользователем на одной странице, влиял на то, что пользователь увидит на следующей странице. Однако, когда я пытаюсь это сделать, я вижу только значение индекса, а не текст.
Создание списка и последующее сопоставление значения индекса с соответствующим местоположением в списке, чтобы получить строку, выглядит немного неудобно, так кто-нибудь знает, есть ли в PyQt улучшенная встроенная функция, которая это делает?
class IntroductionPage(QtWidgets.QWizardPage):
def __init__(self,*args,**kwargs):
super().__init__()
self.setTitle("Project Name")
self.setSubTitle("Please select one of the available projects below")
l = get_projects()
comboBox = QtWidgets.QComboBox(self)
[comboBox.addItem(i) for i in l]
layout = QtWidgets.QGridLayout()
layout.addWidget(comboBox)
self.setLayout(layout)
self.registerField("projectName",comboBox)
class TaskPage(QtWidgets.QWizardPage):
def __init__(self,*args,**kwargs):
super().__init__()
# currently returns an integer and not a string
def initializePage(self):
self.setTitle(self.field("projectName"))
class My_Wizard(QtWidgets.QWizard):
num_of_pages = 2
(intro,task) = range(num_of_pages)
def __init__(self,*args,**kwargs):
super(My_Wizard,self).__init__(*args,**kwargs)
self.setPage(self.intro,IntroductionPage(self))
self.setPage(self.task,TaskPage(self))
self.setStartId(self.intro)
2 ответа
registerField()
Метод имеет больше параметров:
void QWizardPage:: registerField (const QString & name, QWidget * widget, const char * property = nullptr, const char * updatedSignal = nullptr)
Таким образом, решение состоит в том, чтобы указать, что вы хотите получить currentText
собственность QComboBox
:
self.registerField("projectName", comboBox, "currentText")
искал этот ответ некоторое время, так какregisterField()
принимает свойство в качестве параметра.
в вашем мастере вы можете установить пользовательское свойство, например, если вы должны были использовать табличный виджет, который не имеетget
встроенная функциональность для массового получения всей таблицы.
так что вы можете сделать что-то вроде этого
class SplitWizardPage(QWizardPage):
def __init__(self, table_data, table_headers):
super().__init__()
self.table_data = table_data
self.table_headers = table_headers
self.table_widget = QTableWidget()
self.table_widget.setProperty("mutated_table_data", [])
...
def on_cell_changed(self, row, column):
...some get data code
self.table_widget.setProperty("mutated_table_data", table_data)
...
finally
self.table_widget.cellChanged.connect(lambda: on_cell_changed(self, row, column))
self.registerField("split_table_data", self.table_widget, "mutated_table_data", self.table_widget.cellChanged)
окончательно.
wizard.finished.connect(lambda: print(wizard.field("split_table_data")))
как видите, мы присоединяем его к свойству mutated_table_data в поле виджета.