PyQt5双旋转框返回无值

时间:2016-02-03 21:08:04

标签: python pyqt

我有这个:(有类方法,继承自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(?)没有关联?

1 个答案:

答案 0 :(得分:2)

QWizardPage类仅具有一些小部件类型的内部知识。注册一个它不知道的小部件时,你需要指定读取值的属性,以及更改值时发出的信号,作为字符串。

对于QDoubleSpinBox,这将是:

page.registerField("roll", forms[1][1], "value", "valueChanged")

c ++文档here中列出了QWizardPage知道的窗口小部件类型列表。

您还可以使用QWizard方法全局注册此信息,这样您每次拨打registerField()时都不必指定此信息。为此,请致电:

my_wizard.setDefaultProperty("QDoubleSpinBox", "value", "valueChanged")

注意:这是向导的方法,而不是页面。