from tkinter import * root =Tk() root.title("计算器") result=StringVar() result.set(" ") label=Label(root,text="",width=25,height=2,relief="raised",anchor=SE,textvariable=result) label.grid(row=0, column=0,columnspan=4,padx=5,pady=5) Button(root, text="C",width=5,fg="blue",command = lambda:result.set("")).grid(row=1, column=0) Button(root, text="DEL",width=5,command=lambda: result.set(result.get()[:-1])).grid(row=1,column=1) Button(root, text="BCK",width=5,command=lambda: result.set(result.get()[:-1])).grid(row=1,column=2) Button(root, text="/",width=5,command = lambda: result.set(result.get()+"/")).grid(row=1,column=3) Button(root, text="7",width=5,command = lambda: result.set(result.get()+"7")).grid(row=2, column=0) Button(root, text="8",width=5,command = lambda: result.set(result.get()+"8")).grid(row=2, column=1) Button(root, text="9",width=5,command = lambda: result.set(result.get()+"9")).grid(row=2, column=2) Button(root, text="*",width=5,command = lambda: result.set(result.get()+"*")).grid(row=2, column=3) Button(root, text="4",width=5,command = lambda: result.set(result.get()+"4")).grid(row=3, column=0) Button(root, text="5",width=5,command = lambda: result.set(result.get()+"5")).grid(row=3, column=1) Button(root, text="6",width=5,command = lambda: result.set(result.get()+"6")).grid(row=3, column=2) Button(root, text="-",width=5,command = lambda: result.set(result.get()+"-")).grid(row=3, column=3) Button(root, text="1",width=5,command = lambda: result.set(result.get()+"1")).grid(row=4, column=0) Button(root, text="2",width=5,command = lambda: result.set(result.get()+"2")).grid(row=4, column=1) Button(root, text="3",width=5,command = lambda: result.set(result.get()+"3")).grid(row=4, column=2) Button(root, text="+",width=5,command = lambda: result.set(result.get()+"+")).grid(row=4, column=3) Button(root, text="0",width=5,command = lambda: result.set(result.get()+"0")).grid(row=5, column=0) Button(root,text=".",width=5,command=lambda :result.set(result.get()+".")).grid(row=5,column=1) Button(root, text="=",width=12,command = lambda: result.set(result.get()+"="+str(eval(result.get())))).grid(row=5, column=2,columnspan=2) root.mainloop()
效果如下:
优点:
①简洁明了的界面设计:计算器的布局清晰,按钮排列整齐,涵盖了基础的数字、运算符以及功能键符合大多数用户的使用习惯。
②实时显示计算过程:通过StringVar变量result与标签组件绑定,实现了计算过程的实时显示,用户能够清楚地看到输入的每一个数字和运算符,以及最终的计算结果。
③灵活的事件处理:利用lambda匿名函数,为每个按钮定义了点击事件处理逻辑,使得每个按钮都能根据其功能正确地修改result变量的值,实现不同的操作,如数字输入、运算符添加、结果计算等。
④基础功能全面:包含了加减乘除四则运算,支持小数点输入,以及结果的显示,满足基本的计算需求。
⑤简洁的代码结构:通过循环和网格布局(.grid)简化了界面布局的代码,使得整体代码较为紧凑和易于理解。
⑥即时计算能力:按下等号(=)按钮时,通过eval函数直接计算字符串形式的表达式,得到计算结果并显示,简化了手动编写计算逻辑的过程。