先设计计算器的主界面
from tkinter import *
# 设计主窗口
root = Tk()
root.title("计算器")
root.geometry("400x500")
var = StringVar()
设计操作界面
fm1和fm2分别显示区域和按键区域
fm1 = LabelFrame(height=150, width=600, bg='light gray', border=2)
fm1.pack(side="top")
Label(fm1, text="", bd=5, justify=RIGHT, textvariable=var).place(x=25, y=20, width=350, height=100)
fm2 = Frame(height=500, width=500, bg='light gray', border=1)
fm2.pack(side="bottom")
最后 设计按键,为每个按键设计对应的事件
Button(fm2, bd=5, text="C", height=2, width=10, command=lambda: var.set("")).grid(row=0, column=0)
Button(fm2, bd=5, text="DEL", height=2, width=10, command=lambda: var.set(var.get()[:-1])).grid(row=0, column=1)
Button(fm2, bd=5, text="BCK", height=2, width=10, command=lambda: var.set(var.get()[1:])).grid(row=0, column=2)
Button(fm2, bd=5, text="/", height=2, width=10, command=lambda: var.set(var.get() + "/")).grid(row=0, column=3)
Button(fm2, bd=5, text="7", height=2, width=10, command=lambda: var.set(var.get() + "7")).grid(row=1, column=0)
Button(fm2, bd=5, text="8", height=2, width=10, command=lambda: var.set(var.get() + "8")).grid(row=1, column=1)
Button(fm2, bd=5, text="9", height=2, width=10, command=lambda: var.set(var.get() + "9")).grid(row=1, column=2)
Button(fm2, bd=5, text="*", height=2, width=10, command=lambda: var.set(var.get() + "*")).grid(row=1, column=3)
Button(fm2, bd=5, text="4", height=2, width=10, command=lambda: var.set(var.get() + "4")).grid(row=2, column=0)
Button(fm2, bd=5, text="5", height=2, width=10, command=lambda: var.set(var.get() + "5")).grid(row=2, column=1)
Button(fm2, bd=5, text="6", height=2, width=10, command=lambda: var.set(var.get() + "6")).grid(row=2, column=2)
Button(fm2, bd=5, text="-", height=2, width=10, command=lambda: var.set(var.get() + "-")).grid(row=2, column=3)
Button(fm2, bd=5, text="1", height=2, width=10, command=lambda: var.set(var.get() + "1")).grid(row=3, column=0)
Button(fm2, bd=5, text="2", height=2, width=10, command=lambda: var.set(var.get() + "2")).grid(row=3, column=1)
Button(fm2, bd=5, text="3", height=2, width=10, command=lambda: var.set(var.get() + "3")).grid(row=3, column=2)
Button(fm2, bd=5, text="+", height=2, width=10, command=lambda: var.set(var.get() + "+")).grid(row=3, column=3)
Button(fm2, bd=5, text="0", height=2, width=10, command=lambda: var.set(var.get() + "0")).grid(row=4, column=0)
Button(fm2, bd=5, text=".", height=2, width=10, command=lambda: var.set(var.get() + ".")).grid(row=4, column=1)
Button(fm2, bd=5, text="=", height=2, width=22, command=lambda: var.set(str(eval(var.get())))).grid(row=4, column=2, columnspan=2)
root.mainloop()