python - 我的按钮功能在我的 Python 代码中不起作用
问题描述
美好的一天,我正在使用 Tkinter 库在 Python 中设计一个简单的餐馆 Gui,但我的“重置”和“计算价格”按钮无法正常工作。请问可能是什么问题?
from tkinter import *
class Application (Frame):
def __init__(self,anjie):
super(Application,self).__init__(anjie)
#getting the init() function in frame,the superclass
#super is a function that takes two parameters: the name of your subclass i.e. Application and self
self.grid() #allows grid function to work
self.toppings=["sausage","pepperoni","chicken","mushroom","black olive","green pepper","red pepper","onion"]
self.prices={"medium":9.99, "large":12.99, "x-large":14.99, "mid-topping":1.0, "large-topping":1.4, "xl-topping":1.8}
self.checkbox=list(self.toppings)
self.checkboxVar=list(self.toppings)
self.create_widgets()
def create_widgets(self):
menubar=Menu(self)
filemenu=Menu(menubar)
menubar.add_cascade(label="File", menu=filemenu)
menubar.add_cascade(label="Quit",command=window.quit)
filemenu.add_command(label="Submit",command=self.process)
self.label1=Label(self,text="Select size: ")
self.label1.grid(row=0,column=0,sticky=W)
self.size=StringVar() #similar to name in html, groups similar elements together with variable self.size
print(StringVar())
self.radio1=Radiobutton(self,text="Medium",variable=self.size,value="Medium")
self.radio1.grid(row=1,column=0,sticky=W)
self.radio1.select() #makes radio1 the default selected radio button
self.radio2=Radiobutton(self,text="Large",variable=self.size,value="Large")
self.radio2.grid(row=1,column=1,sticky=W)
self.radio2.select()
self.radio3=Radiobutton(self,text="Extra Large",variable=self.size,value="X-Large")
self.radio3.grid(row=1,column=2,sticky=W)
self.radio3.select()
self.label2=Label(self,text="Select size: ")
self.label2.grid(row=2,column=0,sticky=W)
line=2#last row number
for i in range(len(self.toppings)):
line+=1
self.checkboxVar[i]=BooleanVar() #default value added is false
self.checkboxVar[i]=Checkbutton(self,text=self.toppings[i], variable=self.checkboxVar[i])
self.checkboxVar[i].grid(row=line,column=0,sticky=W)
line+=1
self.button1=Button(self,text="Reset",command=self.reset)
self.button1.grid(row=line,column=0,sticky=E)
self.button2=Button(self,text="Calculate Price",command=self.calculate)
self.button2.grid(row=line,column=2)
line+=1
self.label3=Label(self,text="")
self.label3.grid(row=line,column=0)
line+=1
self.label4=Label(self,text="Total: ")
self.label4.grid(row=line,column=0,sticky=E)
self.result=Entry(self,width=10)
self.result.grid(row=line,column=1,sticky=W)
window.config(menu=menubar)
def process(self):
print("This is the process to submit: ")
def reset(self):
self.radio1.select()
for i in range(len(self.toppings)):
self.checkbox[i].deselect()
self.result.delete(0,END)
def calculate(self):
self.totalToppings=0
for i in range(len(self.toppings)):
if self.checkboxVar[i].get():
self.totalToppings+=1
if self.size.get()=="Medium":
self.price=self.prices["medium"]+(self.totalToppings * self.prices["mid-topping"])
if self.size.get()=="Large":
self.price=self.prices["large"]+(self.totalToppings*self.prices["large-topping"])
if self.size.get()=="X-Large":
self.price=self.prices["x-large"]+(self.totalToppings*self.prices["xl-topping"])
str_price="{.2f}".format(self.price)
self.result.delete(0,END)
self.result.insert(END,str_price)
window=Tk()
window.title("Anjie\'s Pizza")
window.geometry("800x500") #WIDTH BY HEIGHT
app=Application(window)
app.mainloop()
我将不胜感激有关此的任何帮助。我用 Python tkinter 库做到了这一点,我的问题是总条目中没有结果。
解决方案
您的代码中有几个问题:
调用
.select()
所有单选按钮,应仅在self.radio1.select()
最初调用用来
self.checkboxVar[i]
代替self.checkbox[i]
def create_widgets(self):
...
#self.radio2.select() # should not call
...
#self.radio3.select() # should not call
...
line=2#last row number
for i in range(len(self.toppings)):
line+=1
self.checkboxVar[i]=BooleanVar() #default value added is false
### should use self.checkbox[i]=... instead of self.checkboxVar[i]=...
self.checkbox[i]=Checkbutton(self,text=self.toppings[i], variable=self.checkboxVar[i])
self.checkbox[i].grid(row=line,column=0,sticky=W)
...
- 使用了无效的浮点格式
{.2f}
,应该{:.2f}
改为:
def calculate(self):
...
str_price="{:.2f}".format(self.price)
...
推荐阅读
- pyomo - 定义可变矩阵并在运行期间手动设置值
- julia - Julia 中的 NonlinearConstraintIndex 是什么?
- java - 如何在map-reduce的multipleinput中将虚拟变量设置为路径
- python - Pywinauto - 如何获取将动态变化的元素(进度条)的“值”属性
- reactjs - 如何将输入数据传递给反应中的另一个组件
- python - 在 pyqt5 Qprinter 中转换为日期格式
- android - 依次加载图像列表。扑
- firebase - 我如何编写另一个用户只能更新其他用户的一个变量的 Firestore 规则?
- javascript - TypeError:无法读取未定义 Discord.js javascript 的属性“添加”
- sql - 选择对两列求和并希望将结果用作选择条件的查询