import tkinter as tk
from tkinter import font

class AnimeCalculator:
    def __init__(self, root):
        self.root = root
        self.root.title("动漫风格计算器")
        self.root.geometry("340x480")
        self.root.resizable(False, False)
        # 动漫主题配色
        self.bg_color = "#191938"
        self.display_bg = "#282850"
        self.btn_num_color = "#52489c"
        self.btn_op_color = "#f264ab"
        self.btn_clear_color = "#4cc9f0"
        self.text_color = "#ffffff"

        self.root.configure(bg=self.bg_color)
        self.expression = ""
        self.input_text = tk.StringVar()

        # 字体设置
        self.calc_font = font.Font(family="Microsoft YaHei", size=20)
        self.btn_font = font.Font(family="Microsoft YaHei", size=16)

        # 显示框
        display_frame = tk.Frame(root, bg=self.display_bg, bd=8)
        display_frame.pack(expand=True, fill="both", padx=12, pady=12)
        input_entry = tk.Entry(
            display_frame,
            textvariable=self.input_text,
            font=self.calc_font,
            bg=self.display_bg,
            fg=self.text_color,
            justify="right",
            bd=0
        )
        input_entry.pack(expand=True, fill="both")

        # 按钮布局容器
        btn_frame = tk.Frame(root, bg=self.bg_color)
        btn_frame.pack(expand=True, fill="both", padx=8, pady=8)

        buttons = [
            ("C", 1, 0, self.btn_clear_color, self.clear),
            ("⌫", 1, 1, self.btn_clear_color, self.backspace),
            ("/", 1, 2, self.btn_op_color, lambda: self.click("/")),
            ("*", 1, 3, self.btn_op_color, lambda: self.click("*")),

            ("7", 2, 0, self.btn_num_color, lambda: self.click("7")),
            ("8", 2, 1, self.btn_num_color, lambda: self.click("8")),
            ("9", 2, 2, self.btn_num_color, lambda: self.click("9")),
            ("-", 2, 3, self.btn_op_color, lambda: self.click("-")),

            ("4", 3, 0, self.btn_num_color, lambda: self.click("4")),
            ("5", 3, 1, self.btn_num_color, lambda: self.click("5")),
            ("6", 3, 2, self.btn_num_color, lambda: self.click("6")),
            ("+", 3, 3, self.btn_op_color, lambda: self.click("+")),

            ("1", 4, 0, self.btn_num_color, lambda: self.click("1")),
            ("2", 4, 1, self.btn_num_color, lambda: self.click("2")),
            ("3", 4, 2, self.btn_num_color, lambda: self.click("3")),

            ("0", 5, 0, self.btn_num_color, lambda: self.click("0")),
            (".", 5, 1, self.btn_num_color, lambda: self.click(".")),
            ("=", 4, 3, "#ffb703", self.equal),
        ]

        # 创建按钮
        for text, row, col, color, cmd in buttons:
            if text == "=":
                btn = tk.Button(
                    btn_frame, text=text, command=cmd,
                    bg=color, fg="#000000", font=self.btn_font,
                    relief=tk.FLAT, bd=0, activebackground="#ffd055"
                )
                btn.grid(row=row, column=col, rowspan=2, sticky="nsew", padx=4, pady=4)
            else:
                btn = tk.Button(
                    btn_frame, text=text, command=cmd,
                    bg=color, fg=self.text_color, font=self.btn_font,
                    relief=tk.FLAT, bd=0, activebackground="#8672c9"
                )
                btn.grid(row=row, column=col, sticky="nsew", padx=4, pady=4)

        # 权重均分网格
        for i in range(6):
            btn_frame.rowconfigure(i, weight=1)
        for i in range(4):
            btn_frame.columnconfigure(i, weight=1)

    def click(self, char):
        self.expression += str(char)
        self.input_text.set(self.expression)

    def clear(self):
        self.expression = ""
        self.input_text.set("")

    def backspace(self):
        self.expression = self.expression[:-1]
        self.input_text.set(self.expression)

    def equal(self):
        try:
            result = eval(self.expression)
            self.input_text.set(str(result))
            self.expression = str(result)
        except ZeroDivisionError:
            self.input_text.set("除零错误")
            self.expression = ""
        except Exception:
            self.input_text.set("表达式错误")
            self.expression = ""


if __name__ == "__main__":
    window = tk.Tk()
    app = AnimeCalculator(window)
    window.mainloop()
