import tkinter as tk
from tkinter import ttk

class AncientCalculator:
    def __init__(self, root):
        # 主窗口设置 古风配色
        self.root = root
        self.root.title("古风计算器")
        self.root.geometry("400x520")
        self.root.resizable(False, False)
        # 古木底色
        self.root.configure(bg="#8B5A2B")

        # 存储计算表达式
        self.expression = ""
        self.create_widgets()

    def create_widgets(self):
        # 1. 显示框 仿古宣纸样式
        display_frame = tk.Frame(self.root, bg="#D2B48C", bd=8, relief=tk.RIDGE)
        display_frame.pack(padx=15, pady=20, fill=tk.BOTH)

        self.display = tk.Label(
            display_frame,
            text="0",
            font=("楷体", 28),
            bg="#F5F0E1",
            fg="#2F1810",
            anchor="e",
            padx=10
        )
        self.display.pack(fill=tk.BOTH, ipady=20)

        # 2. 按钮区域
        btn_frame = tk.Frame(self.root, bg="#8B5A2B")
        btn_frame.pack(padx=15, pady=5)

        # 按钮文本布局
        btn_texts = [
            ["C", "←", "÷", "×"],
            ["7", "8", "9", "-"],
            ["4", "5", "6", "+"],
            ["1", "2", "3", "="],
            ["0", ".", "", ""]
        ]

        # 古风按钮样式
        btn_font = ("楷体", 20)
        btn_bg = "#CD853F"
        btn_fg = "#1A0F08"
        active_bg = "#DEB887"

        for row_idx, row in enumerate(btn_texts):
            for col_idx, text in enumerate(row):
                if not text:
                    continue
                # 特殊按钮加宽/样式区分
                if text == "0":
                    btn = tk.Button(
                        btn_frame, text=text, font=btn_font,
                        bg=btn_bg, fg=btn_fg, activebackground=active_bg,
                        width=8, height=2, bd=3, relief=tk.RAISED,
                        command=lambda t=text: self.on_click(t)
                    )
                    btn.grid(row=row_idx, column=col_idx, padx=5, pady=5, columnspan=2)
                elif text == "=":
                    btn = tk.Button(
                        btn_frame, text=text, font=btn_font,
                        bg="#A0522D", fg="white", activebackground="#8B4513",
                        width=4, height=5, bd=3, relief=tk.RAISED,
                        command=lambda t=text: self.on_click(t)
                    )
                    btn.grid(row=row_idx, column=col_idx, padx=5, pady=5, rowspan=2)
                else:
                    btn = tk.Button(
                        btn_frame, text=text, font=btn_font,
                        bg=btn_bg, fg=btn_fg, activebackground=active_bg,
                        width=4, height=2, bd=3, relief=tk.RAISED,
                        command=lambda t=text: self.on_click(t)
                    )
                    btn.grid(row=row_idx, column=col_idx, padx=5, pady=5)

    def on_click(self, text):
        """按钮点击事件"""
        if text == "C":
            # 清空
            self.expression = ""
            self.display.config(text="0")
        elif text == "←":
            # 退格
            self.expression = self.expression[:-1]
            show = self.expression if self.expression else "0"
            self.display.config(text=show)
        elif text == "=":
            # 计算结果
            try:
                # 替换乘除符号为Python识别符号
                calc_exp = self.expression.replace("×", "*").replace("÷", "/")
                result = str(eval(calc_exp))
                # 去除多余小数位
                if result.endswith(".0"):
                    result = result[:-2]
                self.display.config(text=result)
                self.expression = result
            except:
                self.display.config(text="出错")
                self.expression = ""
        else:
            # 追加数字/符号
            self.expression += text
            self.display.config(text=self.expression)

if __name__ == "__main__":
    root = tk.Tk()
    app = AncientCalculator(root)
    root.mainloop()