Python PyQt SpinBox始终返回0,除非之前使用setValue设置

Python PyQt SpinBox始终返回0,除非之前使用setValue设置,python,qt,pyqt,qspinbox,Python,Qt,Pyqt,Qspinbox,我有一个使用Python2.7和Qt4.7的PyQtGUI,它打开一个由按钮调用的对话框。我可以在对话框和主GUI之间传递值,大部分情况下都可以,直到对话框中出现QSpinBox为止 定义对话框的类如下所示: class BuyDialog(QDialog): def __init__(self): QDialog.__init__(self) global ci, space, cash, current, price, qtyToBuy self.ui = Ui_bu

我有一个使用Python2.7和Qt4.7的PyQtGUI,它打开一个由按钮调用的对话框。我可以在对话框和主GUI之间传递值,大部分情况下都可以,直到对话框中出现QSpinBox为止

定义对话框的类如下所示:

class BuyDialog(QDialog):
def __init__(self):
    QDialog.__init__(self)
    global ci, space, cash, current, price, qtyToBuy
    self.ui = Ui_buyDialog()                                            # Set up the user interface from Designer.
    self.ui.setupUi(self)
    for i in range(0, len(ci)):
        item = str(ci[i][0])
        price = str(ci[i][1])
        self.ui.itemsComboBox.addItem(item)
    price = str(self.getPrice())
    gPrice = "$" + price
    print gPrice
    self.ui.priceFieldLabel.setText(gPrice)
    self.ui.itemsComboBox.currentIndexChanged['QString'].connect(self.updateItems)
    self.ui.availableSpaceFieldLabel.setText(space)
    canBuy = str(funcs.youCanAfford(cash, price))
    self.ui.canAffordFieldLabel.setText(canBuy)
    qtyToBuy = self.ui.buySpinBox.value()
处理对话框本身的代码是

def buyDialog(self):
    global current, price, qtyToBuy
    dialog = BuyDialog()
    result = dialog.exec_()

    if result:
        dialogResult = (current, price, qtyToBuy)
        print dialogResult #debug
        return dialogResult

current
来自对话框中的组合框,
price
来自对
current
的列表查找。我知道对话框更新正确,因为
current
price
返回的值是正确的。但是,
qtyToBuy
始终返回0。我让它返回任何不同内容的唯一方法是在启动时对其调用
setValue()
。无论我到哪里,我都觉得我是唯一一个有这个问题的人,因为我找不到关于这个问题的其他任何东西。有人知道问题出在哪里吗?

正如@Frank指出的那样,由于在显示对话框之前检索spinBox的
value()
,因此spinBox中的用户输入不会影响
qtyToBuy
的值,它将始终为您提供spinBox的默认值(在您的情况下为0)。要从spinBox中检索用户指定的值,应在对话框关闭后检索该值(即用户在对话框上按Ok)


现在,
print
语句将打印用户在对话框上按Ok时spinBox中的值。

请显示获取spinBox的
value()
并使用它的实际代码序列。目前,唯一的输出是
print dialogResult
。我正在通过输出到命令行进行调试。因为我对Python/PyQt不太了解,所以我会慢慢来,确保数据在其他地方使用之前返回正确。为什么在BuyDialog包装self.ui.buySpinBox.value()中使用全局变量而不是方法?行
qtyToBuy=self.ui.buySpinBox.value()
的具体执行位置是什么?抱歉,我误解了-实际检索它的位置在对话框本身的
\uuuu init\uuu
函数中。我将更新问题。
\uuuuu init\uuuu
函数在显示对话框之前执行,因此如果您在那里分配给qtyToBuy,任何用户操作都将无效。最安全的方法是在对话框关闭后调用value()。绝对正确。非常感谢你,我在这件事上撞了很久,我不想承认。
def buyDialog(self):
    global current, price, qtyToBuy
    dialog = BuyDialog()
    result = dialog.exec_()

    qtyToBuy = dialog.ui.buySpinBox.value() # add this line here

    if result:
        dialogResult = (current, price, qtyToBuy)
        print dialogResult #debug
        return dialogResult