باي كيوت سبينبوكس دائما العودة 0 ، ما لم يتم تعيينها مسبقا مع سيتفالو

StackOverflow https://stackoverflow.com//questions/21018269

  •  21-12-2019
  •  | 
  •  

سؤال

لدي واجهة المستخدم الرسومية باي كيوت باستخدام بيثون 2.7 و كيو تي 4.7 الذي يفتح الحوار دعا من قبل الضغط على زر.يمكنني تمرير القيم بين الحوار واجهة المستخدم الرسومية الرئيسية على ما يرام بالنسبة للجزء الأكبر ، حتى يأتي إلى كسبينبوكس في مربع الحوار.

الطبقة التي تحدد الحوار هو مثل ذلك:

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() على ذلك عندما بدأت.في كل مكان نظرت إليه ، لدي انطباع بأنني الشخص الوحيد الذي يعاني من هذه المشكلة ، حيث لا يمكنني العثور على أي شيء آخر بخصوص هذه المشكلة.هل لدى أي شخص أي فكرة عن المشكلة?

هل كانت مفيدة؟

المحلول

كما أشار فرانك @إلى أنه منذ 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 سوف بيان طباعة القيمة التي كانت القيمة في سبينبوكس عندما ضغط المستخدم موافق على الحوار.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top