【发布时间】:2022-01-14 19:07:43
【问题描述】:
我正在为我的大学班级创建一个项目。我正在用披萨餐厅的 python tkinter 创建一个 gui。我创建了 5 个检查按钮,显示 5 个不同的比萨饼,每个比萨饼的价格不同。我创建了一个计算按钮。如何为计算按钮创建一个函数,以根据选择的内容显示每个比萨饼的价格?如果选择了多个,它会说'意大利辣香肠价格是:$','奶酪价格是:$',......等等?如何在 for 循环中为每个披萨赋予不同的 onvalue? 代码在这里:
from tkinter import *
root = Tk()
root.title('Pizza Restaurant')
root.geometry('500x500')
pizza = [['cheese',5], ['pepperoni',10], ['sausage',15], ['BBQ',20], ['hawaiian',25]]
var_list = ['pizza1', 'pizza2', 'pizza3', 'pizza4', 'pizza5']
for i in range(5):
button = Checkbutton(root, text=pizza[i][0], variable=var_list[i], onvalue=pizza[i][1], offvalue=0).grid(row=i, column=0)
var_list[i] = IntVar()
def calc():
for var in var_list:
if var.get() != 0:
label = Label(root, text=var.get()).grid(row=2, column=8)
'''for e in range(5):
button_list.append(Checkbutton(root, text=pizza[e][0], variable=var_list[e], onvalue=pizza[e][1],))
labels.append(Label(root, text=pizza[e][1]))
button_list[e].grid(row=e, column=0, sticky=W)
labels[e].grid(column=1, row=e)
total = 0
def calc():
for i in range(5):
if i == pizza[i][1]:
label = Label(root, text=pizza[i][1]).grid(row=1, column=10)
'''
【问题讨论】:
-
你需要在
button = Checkbutton(...).grid(...)之前移动var_list[i] = IntVar()。而button是None,因为它是grid(...)的结果,而不是Checkbutton(...)。在 for 循环中分配给同一个变量也是没有意义的。 -
当只有一个披萨被点击时,我让它输出每个披萨的价值(价格)。如果点击多个,我会怎么做,显示每个的唯一价格?
-
因为你把价格标签放在了同一个位置。您应该先构建价目表,然后使用价目表创建标签。建议创建一次标签并在
calc()内更新。
标签: python python-3.x loops for-loop tkinter