# 导入Tkinter库（Python内置GUI库）
import tkinter as tk
from tkinter import font

# 定义计算器主类
class Calculator:
    def __init__(self, root):
        # 主窗口设置
        self.root = root
        self.root.title("简易计算器")
        self.root.geometry("320x420")  # 窗口大小
        self.root.resizable(False, False)  # 禁止缩放窗口

        # 存储输入的表达式
        self.expression = ""
        # 显示框字体
        self.text_font = font.Font(size=20)
        # 按钮字体
        self.btn_font = font.Font(size=16)

        # 创建显示框
        self.create_display()
        # 创建按钮
        self.create_buttons()

    # 创建显示输入结果的文本框
    def create_display(self):
        self.display_var = tk.StringVar()
        # 显示框
        display = tk.Entry(
            self.root,
            textvariable=self.display_var,
            font=self.text_font,
            bd=10,
            insertwidth=2,
            width=14,
            justify=tk.RIGHT  # 文字右对齐
        )
        display.grid(row=0, column=0, columnspan=4, pady=10, padx=10)

    # 点击按钮时添加内容到表达式
    def press(self, num):
        self.expression += str(num)
        self.display_var.set(self.expression)

    # 清零功能
    def clear(self):
        self.expression = ""
        self.display_var.set("")

    # 删除最后一个字符
    def backspace(self):
        self.expression = self.expression[:-1]
        self.display_var.set(self.expression)

    # 计算结果
    def calculate(self):
        try:
            # 计算表达式结果
            result = str(eval(self.expression))
            self.display_var.set(result)
            self.expression = result  # 把结果作为新的表达式，支持连续计算
        except:
            # 输入错误时显示提示
            self.display_var.set("错误")
            self.expression = ""

    # 创建所有按钮
    def create_buttons(self):
        # 按钮布局：第一行
        btn7 = tk.Button(self.root, text="7", font=self.btn_font, command=lambda: self.press(7))
        btn7.grid(row=1, column=0, padx=5, pady=5, ipadx=20, ipady=10)

        btn8 = tk.Button(self.root, text="8", font=self.btn_font, command=lambda: self.press(8))
        btn8.grid(row=1, column=1, padx=5, pady=5, ipadx=20, ipady=10)

        btn9 = tk.Button(self.root, text="9", font=self.btn_font, command=lambda: self.press(9))
        btn9.grid(row=1, column=2, padx=5, pady=5, ipadx=20, ipady=10)

        btn_div = tk.Button(self.root, text="/", font=self.btn_font, command=lambda: self.press("/"))
        btn_div.grid(row=1, column=3, padx=5, pady=5, ipadx=20, ipady=10)

        # 第二行
        btn4 = tk.Button(self.root, text="4", font=self.btn_font, command=lambda: self.press(4))
        btn4.grid(row=2, column=0, padx=5, pady=5, ipadx=20, ipady=10)

        btn5 = tk.Button(self.root, text="5", font=self.btn_font, command=lambda: self.press(5))
        btn5.grid(row=2, column=1, padx=5, pady=5, ipadx=20, ipady=10)

        btn6 = tk.Button(self.root, text="6", font=self.btn_font, command=lambda: self.press(6))
        btn6.grid(row=2, column=2, padx=5, pady=5, ipadx=20, ipady=10)

        btn_mul = tk.Button(self.root, text="*", font=self.btn_font, command=lambda: self.press("*"))
        btn_mul.grid(row=2, column=3, padx=5, pady=5, ipadx=20, ipady=10)

        # 第三行
        btn1 = tk.Button(self.root, text="1", font=self.btn_font, command=lambda: self.press(1))
        btn1.grid(row=3, column=0, padx=5, pady=5, ipadx=20, ipady=10)

        btn2 = tk.Button(self.root, text="2", font=self.btn_font, command=lambda: self.press(2))
        btn2.grid(row=3, column=1, padx=5, pady=5, ipadx=20, ipady=10)

        btn3 = tk.Button(self.root, text="3", font=self.btn_font, command=lambda: self.press(3))
        btn3.grid(row=3, column=2, padx=5, pady=5, ipadx=20, ipady=10)

        btn_sub = tk.Button(self.root, text="-", font=self.btn_font, command=lambda: self.press("-"))
        btn_sub.grid(row=3, column=3, padx=5, pady=5, ipadx=20, ipady=10)

        # 第四行
        btn0 = tk.Button(self.root, text="0", font=self.btn_font, command=lambda: self.press(0))
        btn0.grid(row=4, column=0, padx=5, pady=5, ipadx=20, ipady=10)

        btn_dot = tk.Button(self.root, text=".", font=self.btn_font, command=lambda: self.press("."))
        btn_dot.grid(row=4, column=1, padx=5, pady=5, ipadx=20, ipady=10)

        btn_eq = tk.Button(self.root, text="=", font=self.btn_font, command=self.calculate)
        btn_eq.grid(row=4, column=2, padx=5, pady=5, ipadx=20, ipady=10)

        btn_add = tk.Button(self.root, text="+", font=self.btn_font, command=lambda: self.press("+"))
        btn_add.grid(row=4, column=3, padx=5, pady=5, ipadx=20, ipady=10)

        # 第五行
        btn_back = tk.Button(self.root, text="←", font=self.btn_font, command=self.backspace)
        btn_back.grid(row=5, column=0, columnspan=2, padx=5, pady=5, ipadx=42, ipady=10)

        btn_clear = tk.Button(self.root, text="C", font=self.btn_font, command=self.clear)
        btn_clear.grid(row=5, column=2, columnspan=2, padx=5, pady=5, ipadx=42, ipady=10)

# 运行程序
if __name__ == "__main__":
    main_window = tk.Tk()
    calculator = Calculator(main_window)
    main_window.mainloop()