2014-01-09 3 views
0

У меня есть графический интерфейс PyQt с использованием Python 2.7 и QT 4.7, который открывает диалоговое окно, вызываемое кнопкой. Я могу передать значения между диалогом и основным графическим интерфейсом, как правило, отлично по большей части, пока в диалоговом окне не появится 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. Я знаю, что диалог обновляется правильно, поскольку значения, возвращаемые для current и price, верны. Тем не менее, qtyToBuy всегда возвращает 0. Единственный способ, которым я получил его, чтобы вернуть что-то другое, - это вызвать setValue() на нем, когда он запущен. Всюду, где я смотрел, у меня такое впечатление, что я единственный человек, у которого была эта проблема, потому что я не могу найти ничего другого в этом вопросе. Кто-нибудь знает, в чем проблема?

+0

Пожалуйста, покажите действительную последовательность кода, в которой вы получаете значение 'value()' спина и используя его. – qurban

+0

Пока единственным выходом является 'print dialogResult'. Я отлаживаю вывод из командной строки. Так как я не знаю Python/PyQt, я медленно и уверен, что данные вернутся правильно, прежде чем я буду использовать его в другом месте. – Bendustries

+0

Зачем использовать глобальные переменные вместо метода в BuyDialog wrapping self.ui.buySpinBox.value()? А где именно строка 'qtyToBuy = self.ui.buySpinBox.value()' выполнена? –

ответ

1

Как @Frank отметил, что, поскольку value() из со счётчиком извлекается перед показан диалог, вводимые пользователем в со счётчиком не повлияет на стоимость qtyToBuy, она всегда даст вам значение по умолчанию (который со счётчиком 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 оператор распечатывает значение, которое было значение в spinBox, когда пользователь нажал Ok в диалоговом окне.

+0

Абсолютно мертв. Огромное вам спасибо, что я так сильно ударился головой об этом, пока не хотел признаться. – Bendustries