import tkinter as tk
from tkinter import font

class FunCalculator:
    def __init__(self, root):
        # 主窗口设置
        self.root = root
        self.root.title("趣味彩色计算器")
        self.root.geometry("400x600")
        self.root.resizable(False, False)
        self.root.configure(bg="#2c3e50")

        # 自定义字体
        num_font = font.Font(size=22, weight="bold")
        show_font = font.Font(size=32, weight="bold")

        # 显示输入输出框
        self.result_var = tk.StringVar(value="0")
        show_entry = tk.Entry(root, textvariable=self.result_var, font=show_font,
                              justify="right", bd=12, bg="#ecf0f1", fg="#222222")
        show_entry.pack(pady=25, padx=15, fill=tk.X)

        # 按钮布局列表 [文字, 背景色, 行, 列]
        btn_list = [
            ["C", "#e74c3c", 1, 0], ["←", "#f39c12", 1, 1], ["/", "#9b59b6", 1, 2], ["*", "#9b59b6", 1, 3],
            ["7", "#3498db", 2, 0], ["8", "#3498db", 2, 1], ["9", "#3498db", 2, 2], ["-", "#9b59b6", 2, 3],
            ["4", "#3498db", 3, 0], ["5", "#3498db", 3, 1], ["6", "#3498db", 3, 2], ["+", "#9b59b6", 3, 3],
            ["1", "#3498db", 4, 0], ["2", "#3498db", 4, 1], ["3", "#3498db", 4, 2], ["=", "#27ae60", 4, 3],
            ["0", "#3498db", 5, 0], [".", "#3498db", 5, 1], ["", "#2c3e50", 5, 2], ["", "#2c3e50", 5, 3]
        ]

        # 按钮容器框架
        frame = tk.Frame(root, bg="#2c3e50")
        frame.pack(pady=5)

        # 循环生成按钮
        for txt, color, row, col in btn_list:
            if txt == "":
                continue
            btn = tk.Button(frame, text=txt, font=num_font, bg=color, fg="white",
                            width=5, height=2, command=lambda t=txt: self.click_btn(t))
            btn.grid(row=row, column=col, padx=6, pady=6)

    def click_btn(self, text):
        # 清零按钮
        if text == "C":
            self.result_var.set("0")
        # 退格删除
        elif text == "←":
            s = self.result_var.get()
            if len(s) > 1:
                s = s[:-1]
            else:
                s = "0"
            self.result_var.set(s)
        # 等于计算结果
        elif text == "=":
            try:
                res = eval(self.result_var.get())
                # 小数优化，去除多余.0
                if res == int(res):
                    res = int(res)
                self.result_var.set(str(res))
            except:
                self.result_var.set("输入错误")
        # 数字与符号输入
        else:
            now = self.result_var.get()
            if now == "0" and text not in "+-*/.":
                now = ""
            if now == "输入错误":
                now = ""
            self.result_var.set(now + text)

# 启动程序
if __name__ == "__main__":
    window = tk.Tk()
    app = FunCalculator(window)
    window.mainloop()