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)

registerField()方法具有更多参数:

void QWizardPage::registerField(const QString &name, QWidget *widget, const char *property = nullptr, const char *changedSignal = nullptr(

所以解决方案是指示你想要获取QComboBoxcurrentText属性:

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">

最新更新