Python使用tkinter模块编写简易计算器
import tkinter as tk
class GUI:
def __init__(self) -> None:
self.root = tk.Tk()
self.root.title("计算器")
self.root.geometry("264x285")
self.interface()
def interface(self):
self.output = tk.Entry(self.root, width=34)
self.output.grid(row=0, column=0, rowspan=1, columnspan=4, padx=10, pady=10)
tk.Button(
self.root,
text="C",
width=8,
height=2,
foreground="Blue",
command=self.clear_all,
).grid(row=1, column=0, sticky="e")
tk.Button(
self.root, text="DEL", width=8, height=2, command=self.clear_single
).grid(row=1, column=1, sticky="e")
tk.Button(
self.root, text="BCK", width=8, height=2, command=self.clear_single
).grid(row=1, column=2, sticky="e")
tk.Button(
self.root,
text="/",
width=8,
height=2,
command=lambda: self.output.insert("end", "/"),
).grid(row=1, column=3, sticky="e")
self.btn_box = [0]
for i in range(1, 10):
self.btn_box.append(
tk.Button(
self.root,
text=str(i),
width=8,
height=2,
command=lambda num=i: self.output.insert("end", num),
)
)
tmp = 2
for i in range(9, 0, -1):
self.btn_box[i].grid(row=tmp, column=(i + 2) % 3, sticky="w")
if (i + 2) % 3 == 0:
tmp += 1
tk.Button(
self.root,
text="*",
width=8,
height=2,
command=lambda: self.output.insert("end", "*"),
).grid(row=2, column=3, sticky="e")
tk.Button(
self.root,
text="-",
width=8,
height=2,
command=lambda: self.output.insert("end", "-"),
).grid(row=3, column=3, sticky="w")
tk.Button(
self.root,
text="+",
width=8,
height=2,
command=lambda: self.output.insert("end", "+"),
).grid(row=4, column=3, sticky="w")
tk.Button(
self.root,
text="0",
width=8,
height=2,
command=lambda: self.output.insert("end", "0"),
).grid(row=5, column=0)
tk.Button(
self.root,
text=".",
width=8,
height=2,
command=lambda: self.output.insert("end", "."),
).grid(row=5, column=1)
tk.Button(
self.root, text="=", width=17, height=2, command=self.output_result
).grid(row=5, column=2, columnspan=2)
def clear_all(self):
self.output.delete(0, "end")
def clear_single(self):
tmp = self.output.get()
self.clear_all()
self.output.insert(0, tmp[0:-1])
def output_result(self):
tmp = self.output.get()
self.clear_all()
try:
self.output.insert(0, eval(tmp))
except Exception:
self.output.insert(0, "Error")
if __name__ == "__main__":
a = GUI()
a.root.mainloop()