باي كيوت سبينبوكس دائما العودة 0 ، ما لم يتم تعيينها مسبقا مع سيتفالو
سؤال
لدي واجهة المستخدم الرسومية باي كيوت باستخدام بيثون 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
سوف بيان طباعة القيمة التي كانت القيمة في سبينبوكس عندما ضغط المستخدم موافق على الحوار.