我想做一个购物篮/购物车,里面有字典里的东西。字典包含商品名称及其价格。下面的代码显示字典中的项目,并将数量乘以价格。有+和-按钮可以修改特定项目的数量,但我的代码有问题,按钮只更改最后一个项目的数量,不会根据数量更改价格。我希望你能帮助我。谢谢
from tkinter import *
def add_qty():
qty = qtity_label.cget('text')
qty += 1
qtity_label.config(text=qty)
print(qty)
def sub_qty():
qty = qtity_label.cget('text')
qty -= 1
qtity_label.config(text=qty)
print(qty)
root = Tk()
shopping_basket = {'nerf': 25.00,
'lego': 10.00,
'ball': 5.00}
row = 0
for item in shopping_basket:
item_name_lbl = Label(root, text=item)
item_name_lbl.grid(column=0, row=row)
qtity_label = Label(root, text=2)
qtity_label.grid(column=5, row=row)
price_lbl = Label(root, text=qtity_label.cget('text')*shopping_basket[item])
price_lbl.grid(column=9, row=row)
sub_qtity_btn = Button(root, text='-', command=sub_qty)
sub_qtity_btn.grid(column=4, row=row)
add_qtity_btn = Button(root, text='+', command=add_qty)
add_qtity_btn.grid(column=6, row=row)
row += 1
root.mainloop()
由于在for循环中使用了相同的名称集,因此在for循环之后,名称集指向最后的赋值
其中一种方法是使用^{} 将标签的当前引用传递给每个循环中的两个函数:
您正在覆盖循环中的
qtity_label
,因此它将是您最后设置的内容。当add_qty
运行时,它只看到qtity_label
的最后一个值,因此它会更新您需要单独保存所有标签,或将它们传递到
command
函数中,并使用传入的标签而不是全局标签:然后:
有关为什么需要
q=qtity_label
的解释,请参阅thispost。基本上,q
是qtity_label
;但是被保存的方式是以后不会被意外覆盖的(有点)相关问题 更多 >
编程相关推荐