# 导入Tkinter库（Python内置，无需安装）
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.custom_font = font.Font(size=16)
        self.display_font = font.Font(size=24)

        # 显示框变量（存储输入的表达式）
        self.expression = ""
        self.display_var = tk.StringVar()

        # 创建显示框
        self.create_display()

        # 创建按钮
        self.create_buttons()

    # 创建计算器显示区域
    def create_display(self):
        display_frame = tk.Frame(self.root, bg="#f0f0f0")
        display_frame.pack(pady=10)

        display = tk.Entry(
            display_frame,
            textvariable=self.display_var,
            font=self.display_font,
            width=15,
            bd=10,
            insertwidth=2,
            justify="right"  # 文字右对齐
        )
        display.grid(row=0, column=0)
        display.pack(ipady=10)

    # 按钮点击事件：添加数字/符号
    def button_click(self, char):
        self.expression += str(char)
        self.display_var.set(self.expression)

    # 清空按钮
    def button_clear(self):
        self.expression = ""
        self.display_var.set("")

    # 退格按钮
    def button_backspace(self):
        self.expression = self.expression[:-1]
        self.display_var.set(self.expression)

    # 等于按钮：计算结果
    def button_equal(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):
        button_frame = tk.Frame(self.root)
        button_frame.pack()

        # 按钮布局：第一行
        btn_clear = tk.Button(button_frame, text="C", font=self.custom_font, padx=28, pady=10,
                              command=self.button_clear, bg="#ff6666", fg="white")
        btn_back = tk.Button(button_frame, text="←", font=self.custom_font, padx=26, pady=10,
                             command=self.button_backspace, bg="#ff9933", fg="white")
        btn_mod = tk.Button(button_frame, text="%", font=self.custom_font, padx=28, pady=10,
                            command=lambda: self.button_click("%"))
        btn_div = tk.Button(button_frame, text="/", font=self.custom_font, padx=30, pady=10,
                            command=lambda: self.button_click("/"), bg="#6699ff", fg="white")

        btn_clear.grid(row=0, column=0)
        btn_back.grid(row=0, column=1)
        btn_mod.grid(row=0, column=2)
        btn_div.grid(row=0, column=3)

        # 第二行
        btn7 = tk.Button(button_frame, text="7", font=self.custom_font, padx=30, pady=10,
                         command=lambda: self.button_click(7))
        btn8 = tk.Button(button_frame, text="8", font=self.custom_font, padx=30, pady=10,
                         command=lambda: self.button_click(8))
        btn9 = tk.Button(button_frame, text="9", font=self.custom_font, padx=30, pady=10,
                         command=lambda: self.button_click(9))
        btn_mul = tk.Button(button_frame, text="*", font=self.custom_font, padx=30, pady=10,
                            command=lambda: self.button_click("*"), bg="#6699ff", fg="white")

        btn7.grid(row=1, column=0)
        btn8.grid(row=1, column=1)
        btn9.grid(row=1, column=2)
        btn_mul.grid(row=1, column=3)

        # 第三行
        btn4 = tk.Button(button_frame, text="4", font=self.custom_font, padx=30, pady=10,
                         command=lambda: self.button_click(4))
        btn5 = tk.Button(button_frame, text="5", font=self.custom_font, padx=30, pady=10,
                         command=lambda: self.button_click(5))
        btn6 = tk.Button(button_frame, text="6", font=self.custom_font, padx=30, pady=10,
                         command=lambda: self.button_click(6))
        btn_sub = tk.Button(button_frame, text="-", font=self.custom_font, padx=30, pady=10,
                            command=lambda: self.button_click("-"), bg="#6699ff", fg="white")

        btn4.grid(row=2, column=0)
        btn5.grid(row=2, column=1)
        btn6.grid(row=2, column=2)
        btn_sub.grid(row=2, column=3)

        # 第四行
        btn1 = tk.Button(button_frame, text="1", font=self.custom_font, padx=30, pady=10,
                         command=lambda: self.button_click(1))
        btn2 = tk.Button(button_frame, text="2", font=self.custom_font, padx=30, pady=10,
                         command=lambda: self.button_click(2))
        btn3 = tk.Button(button_frame, text="3", font=self.custom_font, padx=30, pady=10,
                         command=lambda: self.button_click(3))
        btn_add = tk.Button(button_frame, text="+", font=self.custom_font, padx=28, pady=10,
                            command=lambda: self.button_click("+"), bg="#6699ff", fg="white")

        btn1.grid(row=3, column=0)
        btn2.grid(row=3, column=1)
        btn3.grid(row=3, column=2)
        btn_add.grid(row=3, column=3)

        # 第五行
        btn0 = tk.Button(button_frame, text="0", font=self.custom_font, padx=68, pady=10,
                         command=lambda: self.button_click(0))
        btn_dot = tk.Button(button_frame, text=".", font=self.custom_font, padx=31, pady=10,
                            command=lambda: self.button_click("."))
        btn_eq = tk.Button(button_frame, text="=", font=self.custom_font, padx=28, pady=10,
                           command=self.button_equal, bg="#33cc33", fg="white")

        btn0.grid(row=4, column=0, columnspan=2)
        btn_dot.grid(row=4, column=2)
        btn_eq.grid(row=4, column=3)


# 主程序运行
if __name__ == "__main__":
    main_window = tk.Tk()
    app = Calculator(main_window)
    main_window.mainloop()
