PyQt SpinBox revenant toujours à 0, sauf si auparavant par le setValue
Question
J'ai un PyQt interface graphique à l'aide de Python 2.7 et QT 4.7, ouvre une boîte de dialogue appelée par un bouton poussoir.Je peux passer des valeurs entre le dialogue et l'interface graphique principale très bien pour la plupart, jusqu'à ce qu'il s'agit d'une QSpinBox dans la boîte de dialogue.
La classe qui définit la boîte de dialogue comme suit:
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()
Le code qui gère la boîte de dialogue elle-même est
def buyDialog(self):
global current, price, qtyToBuy
dialog = BuyDialog()
result = dialog.exec_()
if result:
dialogResult = (current, price, qtyToBuy)
print dialogResult #debug
return dialogResult
current
provient d'une zone de liste déroulante dans la boîte de dialogue, et price
vient à partir d'une liste de recherche contre current
.Je sais que la boîte de dialogue mise à jour correctement, que les valeurs renvoyées pour current
et price
sont corrects.Cependant, qtyToBuy
retourne toujours 0.La seule façon que j'ai eu à le faire revenir quelque chose de différent est en appelant setValue()
lorsqu'il est lancé.Partout où j'ai regardé, j'ai l'impression que je suis la seule personne qui avait ce problème, que je ne trouve rien d'autre sur cette question.Quelqu'un aurait-il une idée de quel est le problème?
La solution
Comme @Frank a souligné que, depuis l' value()
de la boîte est récupérée dans la boîte de dialogue est affichée, l'entrée de l'utilisateur dans la boîte de choix n'affectera pas la valeur de qtyToBuy
, il vous donnera toujours la valeur par défaut de la boîte (qui est 0 dans votre cas).Pour récupérer la valeur d'utilisateur spécifié à partir de la boîte, vous devez récupérer la valeur après la boîte de dialogue est fermée (c'est à direl'utilisateur appuie sur Ok dans la boîte de dialogue)
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
Maintenant, le print
déclaration d'imprimer la valeur qui a de la valeur dans la boîte de choix lorsque l'utilisateur appuie sur Ok dans la boîte de dialogue.