PyQt6变量修改及披萨点餐APP计费异常、NameError问题求助
问题排查与解决方法
问题1:未选择饮品/披萨仍收取对应费用
原因:
- 披萨价格
PizzaPrice1、PizzaPrice2直接硬编码为10,无论用户是否选择对应披萨,都会被强制计入总价 - 饮品价格未设置默认值,即便未选择任何饮品,后续计算仍会尝试加入未正确初始化的费用
问题2:NameError: name 'DrPrice1' is not defined
原因:
DrPrice1是定义在AddDrink函数内部各个if/elif分支里的局部嵌套函数,函数外部无法访问该名称- 就算能访问,
DrPrice = (DrPrice1)只是将函数对象本身赋值给DrPrice,并未执行函数获取价格,逻辑完全错误
修复后的代码示例
# 初始化默认价格为0,未选择对应商品时不产生费用 DrPrice = 0 PizzaPrice1 = 0 PizzaPrice2 = 0 DroneFee = 5 def AddDrink(): global DrPrice # 声明使用全局变量DrPrice if DrinkUI.CokeCheck.isChecked(): CheckoutUI.DrinkOrder.setText("Coke Classic") CheckoutUI.DrinkPrice.setText("5") DrPrice = 5 elif DrinkUI.CokeZCheck.isChecked(): CheckoutUI.DrinkOrder.setText("Coke Zero") CheckoutUI.DrinkPrice.setText("5") DrPrice = 5 elif DrinkUI.FantaCheck.isChecked(): CheckoutUI.DrinkOrder.setText("Fanta") CheckoutUI.DrinkPrice.setText("5") DrPrice = 5 elif DrinkUI.AJCheck.isChecked(): CheckoutUI.DrinkOrder.setText("Apple Juice") CheckoutUI.DrinkPrice.setText("5") DrPrice = 5 elif DrinkUI.WaterCheck.isChecked(): CheckoutUI.DrinkOrder.setText("Water") CheckoutUI.DrinkPrice.setText("5") DrPrice = 5 else: # 未选择任何饮品时重置显示和价格 CheckoutUI.DrinkOrder.setText("") CheckoutUI.DrinkPrice.setText("0") DrPrice = 0 # 新增披萨选择处理函数,逻辑与饮品保持一致 def AddPizza1(): global PizzaPrice1 if PizzaUI.Pizza1Check.isChecked(): PizzaPrice1 = 10 CheckoutUI.Pizza1Order.setText("XX披萨") CheckoutUI.Pizza1Price.setText("10") else: PizzaPrice1 = 0 CheckoutUI.Pizza1Order.setText("") CheckoutUI.Pizza1Price.setText("0") def AddPizza2(): global PizzaPrice2 if PizzaUI.Pizza2Check.isChecked(): PizzaPrice2 = 10 CheckoutUI.Pizza2Order.setText("YY披萨") CheckoutUI.Pizza2Price.setText("10") else: PizzaPrice2 = 0 CheckoutUI.Pizza2Order.setText("") CheckoutUI.Pizza2Price.setText("0") # 封装总价计算逻辑,用户选择变化时可随时调用更新 def CalculateTotal(): global DrPrice, PizzaPrice1, PizzaPrice2, DroneFee ItemTotalPr = PizzaPrice1 + PizzaPrice2 + DrPrice Total = ItemTotalPr + DroneFee # 更新结账UI的总价显示 CheckoutUI.ItemTotal.setText(str(ItemTotalPr)) CheckoutUI.FinalTotal.setText(str(Total))
关键优化点
- 所有价格变量初始化默认值为0,未选择商品时不产生费用
- 移除不必要的嵌套函数,直接通过全局变量更新价格(若采用面向对象开发,可改用类属性替代全局变量)
- 新增未选择商品时的UI重置逻辑,保证显示内容与实际价格一致
- 将总价计算封装为独立函数,便于在用户选择变动时快速更新结果
内容的提问来源于stack exchange,提问作者Cereal
相关产品推荐
相关产品推荐

