我有这个:(有类方法,继承自QWizard)
def getForms(self):
return [
(
QtWidgets.QLabel("Name"),
QtWidgets.QLineEdit()
),
(
QtWidgets.QLabel("Roll"),
QtWidgets.QDoubleSpinBox()
)
]
def registerFields(self, page, forms):
page.registerField("name*", forms[0][1])
page.registerField("roll", forms[1][1])
在代码的其他地方
id = self.currentId()
if id == 1:
print self.field("name") # this rightly give me a name from LineEdit
print self.field("roll") # but this give me just None, why?
当我改变时
QtWidgets.QDoubleSpinBox()
到
QtWidgets.QSpinBox()
行:
print self.field("roll")
工作正常。
为什么我得到None而不是double值?
修改
我刚刚注意到,当我尝试将'roll'字段作为强制性字段时。
page.registerField("roll*", forms[1][1])
我在程序中填写'spinbox',我无法点击'next'(下一个被禁用)。我的程序中有我的旋转盒。我可以在那里设置值。但是看起来这个字段与QWizard(?)没有关联?
答案 0 :(得分:2)
QWizardPage
类仅具有一些小部件类型的内部知识。注册一个它不知道的小部件时,你需要指定读取值的属性,以及更改值时发出的信号,作为字符串。
对于QDoubleSpinBox
,这将是:
page.registerField("roll", forms[1][1], "value", "valueChanged")
c ++文档here中列出了QWizardPage
知道的窗口小部件类型列表。
您还可以使用QWizard
方法全局注册此信息,这样您每次拨打registerField()
时都不必指定此信息。为此,请致电:
my_wizard.setDefaultProperty("QDoubleSpinBox", "value", "valueChanged")
注意:这是向导的方法,而不是页面。