0

我有一个使用 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()在它启动时调用它。在我看过的任何地方,我都觉得我是唯一遇到这个问题的人,因为我找不到关于这个问题的其他任何东西。有谁知道问题是什么?

4

1 回答 1

1

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

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当用户在对话框中按下 Ok 时,该语句将打印 spinBox 中的值。

于 2014-01-09T12:52:36.790 回答