import tkinter as tk
class Calculator:
def __init__(self, root):
self.root = root
self.root.title("计算器")
self.root.geometry("300x400")
self.root.resizable(False, False)
self.root.configure(bg="#f0f0f0")
# 设置字体,确保中文正常显示
self.font = ('SimHei', 14)
# 存储当前输入和计算结果
self.current_expression = ""
self.result = ""
# 创建显示屏
self.create_display()
# 创建按钮
self.create_buttons()
def create_display(self):
# 创建显示屏框架
display_frame = tk.Frame(self.root, bg="#f0f0f0", height=80)
display_frame.pack(fill=tk.BOTH, padx=10, pady=10)
# 创建表达式显示标签
self.expression_label = tk.Label(
display_frame,
text="",
font=('SimHei', 12),
bg="#f0f0f0",
fg="#666666",
anchor=tk.E
)
self.expression_label.pack(fill=tk.X, padx=5, pady=(5, 0))
# 创建结果显示标签
self.result_label = tk.Label(
display_frame,
text="0",
font=self.font,
bg="#f0f0f0",
fg="#333333",
anchor=tk.E
)
self.result_label.pack(fill=tk.X, padx=5, pady=(0, 5))
def create_buttons(self):
# 创建按钮框架
buttons_frame = tk.Frame(self.root, bg="#f0f0f0")
buttons_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
# 按钮布局
buttons = [
('7', 1, 0), ('8', 1, 1), ('9', 1, 2), ('/', 1, 3),
('4', 2, 0), ('5', 2, 1), ('6', 2, 2), ('*', 2, 3),
('1', 3, 0), ('2', 3, 1), ('3', 3, 2), ('-', 3, 3),
('0', 4, 0), ('.', 4, 1), ('=', 4, 2), ('+', 4, 3),
('C', 0, 0), ('(', 0, 1), (')', 0, 2), ('⌫', 0, 3)
]
# 创建并放置按钮
for button_data in buttons:
text, row, col = button_data
button = tk.Button(
buttons_frame,
text=text,
font=self.font,
width=5,
height=2,
bg="#ffffff",
fg="#333333",
relief=tk.RAISED,
bd=2,
command=lambda txt=text: self.button_click(txt)
)
button.grid(row=row, column=col, padx=5, pady=5, sticky="nsew")
# 设置网格权重,使按钮均匀分布
for i in range(5):
buttons_frame.grid_rowconfigure(i, weight=1)
for i in range(4):
buttons_frame.grid_columnconfigure(i, weight=1)
def button_click(self, button_text):
if button_text == '=':
self.calculate()
elif button_text == 'C':
self.clear_all()
elif button_text == '⌫':
self.backspace()
else:
self.append_to_expression(button_text)
def append_to_expression(self, value):
self.current_expression += value
self.update_display()
def backspace(self):
self.current_expression = self.current_expression[:-1]
self.update_display()
def clear_all(self):
self.current_expression = ""
self.result = ""
self.update_display()
def calculate(self):
try:
self.result = str(eval(self.current_expression))
self.current_expression = self.result
except Exception as e:
self.result = "错误"
finally:
self.update_display()
def update_display(self):
# 更新表达式显示
self.expression_label.config(text=self.current_expression)
# 更新结果显示
if self.result:
self.result_label.config(text=self.result)
else:
self.result_label.config(text=self.current_expression if self.current_expression else "0")
if __name__ == "__main__":
root = tk.Tk()
app = Calculator(root)
root.mainloop()
Python每日一练(计算器)
最新推荐文章于 2025-07-29 19:45:28 发布