2014-01-09 47 views
0

我有一個使用Python 2.7和QT 4.7的PyQt GUI,可以打開一個由按鈕調用的對話框。我可以在對話框和主GUI之間傳遞值,但大部分情況都很好,直到它出現在對話框中的QSpinBox中。PyQt SpinBox總是返回0,除非先前用setValue設置

定義對話框類是像這樣:

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。我知道對話框正確更新,因爲currentprice返回的值是正確的。然而,qtyToBuy總是返回0.我得到它返回任何不同的唯一方法是在它啓動時調用setValue()。到處都是我看到的,我覺得我是唯一有這個問題的人,因爲我在這個問題上找不到任何其他的東西。有誰知道問題是什麼?

+0

請顯示您獲取旋轉框的'value()'並使用它的代碼的實際順序。 – qurban

+0

現在,唯一的輸出是'print dialogResult'。我正在通過輸出到命令行進行調試。由於我不太瞭解Python/PyQt,所以我正在慢慢地確定數據在我在其他地方使用之前正確返回。 – Bendustries

+0

爲什麼使用全局變量而不是BuyDialog中的方法wraping self.ui.buySpinBox.value()?和'qtyToBuy = self.ui.buySpinBox.value()'行一樣在哪裏執行? –

回答

1

As @Frank指出,由於spinBox的value()在顯示對話框之前被檢索,因此spinBox中的用戶輸入不會影響qtyToBuy的值,它總是會給出spinBox的默認值在你的情況下是0)。爲了取回紡紗器用戶指定的值,你應該在對話框關閉後,檢索值(即用戶在對話框中按下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語句將打印這是在價值的價值spinBox當用戶在對話框上按下確定。

+0

創建的變量絕對死掉。非常感謝你 - 我在這方面一直耿耿於懷的時間比我想要承認的要長得多。 – Bendustries