2014-01-09 6 views
0

저는 푸시 버튼이라는 대화 상자를 여는 Python 2.7 및 QT 4.7을 사용하는 PyQt GUI를 사용합니다. 대화 상자의 QSpinBox에 올 때까지 대화 상자와 주 GUI 사이의 값을 대부분 잘 전달할 수 있습니다.이전에 setValue로 설정하지 않은 한 PyQt SpinBox는 항상 0을 반환합니다.

대화 상자를 정의하는 클래스는 그래서 같다 :

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의 메소드 대신 전역 변수를 사용하는 이유 self.ui.buySpinBox.value()? 그리고 정확히'qtyToBuy = self.ui.buySpinBox.value()'행이 실행됩니까? –

답변

1

@Frank은 대화 상자가 표시되기 전에 spinBox의 value()이 검색되었으므로 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.

+0

절대적으로 유효하다. 고마워요. 나는이 사실에 대해 머리를 숙이고 싶다. – Bendustries