PyQt数字调整框始终返回0,除非以前使用setValu设置

2024-05-09 01:47:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个使用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()

处理对话框本身的代码是

^{pr2}$

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


Tags: selfciuiinitspacecashcurrentitem
1条回答
网友
1楼 · 发布于 2024-05-09 01:47:03

正如@Frank指出的那样,由于spinBox的value()是在对话框显示之前检索到的,所以用户在spinBox中的输入不会影响qtyToBuy的值,它将始终为您提供spinBox的默认值(在您的例子中是0)。要从数字调整框中检索用户指定的值,应在对话框关闭后检索该值(即用户按对话框上的“确定”按钮)

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中的值。在

相关问题 更多 >