PyQt SpinBox 始终返回 0,除非之前使用 setValue 设置
题
我有一个使用 Python 2.7 和 QT 4.7 的 PyQt GUI,它打开一个由按钮调用的对话框。在大多数情况下,我可以在对话框和主 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 指出的那样,自从 value()
在显示对话框之前检索 spinBox 的值,spinBox 中的用户输入不会影响 spinBox 的值 qtyToBuy
, ,它总是会给你 spinBox 的默认值(在你的例子中是 0 )。要从 spinBox 检索用户指定的值,您应该在对话框关闭后检索该值(即用户在对话框上按确定)
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
现在 print
语句将打印当用户在对话框上按“确定”时 spinBox 中的值。
不隶属于 StackOverflow