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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top