import tkinter as tk
from tkinter import font
import math

class BronzeStyleCalculator:
    def __init__(self, root):
        self.root = root
        self.root.title("青铜算筹计算器")
        self.root.geometry("440x640")
        self.root.resizable(False, False)
        # 整体背景：古铜底色
        self.root.configure(bg="#5C4033")

        # 古风宋体字体
        display_big_font = font.Font(size=36, weight="bold", family="SimSun")
        display_small_font = font.Font(size=18, family="SimSun")
        btn_font = font.Font(size=16, weight="bold", family="SimSun")

        self.input_content = tk.StringVar()
        self.result_content = tk.StringVar(value="零")

        # 输入框外框：青铜浮雕边框
        input_frame = tk.Frame(root, bg="#8B5A2B", bd=5, relief=tk.RIDGE)
        input_frame.pack(fill=tk.X, padx=18, pady=(25, 8))
        input_entry = tk.Entry(
            input_frame, textvariable=self.input_content, font=display_small_font,
            bg="#D4AF37", fg="#2C1810", bd=0, justify="right"
        )
        input_entry.pack(fill=tk.X, ipady=10, padx=6)

        # 结果显示框
        res_frame = tk.Frame(root, bg="#6B4423", bd=6, relief=tk.RIDGE)
        res_frame.pack(fill=tk.X, padx=18, pady=(0, 20))
        res_entry = tk.Entry(
            res_frame, textvariable=self.result_content, font=display_big_font,
            bg="#E6C87A", fg="#601000", bd=0, justify="right"
        )
        res_entry.pack(fill=tk.X, ipady=14, padx=6)

        # 按钮容器 古铜底色
        btn_container = tk.Frame(root, bg="#4A3328")
        btn_container.pack(padx=15, pady=5, fill=tk.BOTH, expand=True)

        # 按键配置：文字、古铜色系、文字色、行、列、跨列
        btn_list = [
            ("清盘", "#992E22", "#FFE6B3", 0, 0, 1),
            ("删字", "#A64B38", "#FFE6B3", 0, 1, 1),
            ("折百", "#594438", "#FFE6B3", 0, 2, 1),
            ("除", "#B8860B", "#2C1810", 0, 3, 1),

            ("柒", "#604020", "#FFE6B3", 1, 0, 1),
            ("捌", "#604020", "#FFE6B3", 1, 1, 1),
            ("玖", "#604020", "#FFE6B3", 1, 2, 1),
            ("乘", "#B8860B", "#2C1810", 1, 3, 1),

            ("肆", "#604020", "#FFE6B3", 2, 0, 1),
            ("伍", "#604020", "#FFE6B3", 2, 1, 1),
            ("陆", "#604020", "#FFE6B3", 2, 2, 1),
            ("减", "#B8860B", "#2C1810", 2, 3, 1),

            ("壹", "#604020", "#FFE6B3", 3, 0, 1),
            ("贰", "#604020", "#FFE6B3", 3, 1, 1),
            ("叁", "#604020", "#FFE6B3", 3, 2, 1),
            ("加", "#B8860B", "#2C1810", 3, 3, 1),

            ("零", "#604020", "#FFE6B3", 4, 0, 2),
            ("点", "#604020", "#FFE6B3", 4, 2, 1),
            ("定算", "#3D6B30", "#FFE6B3", 4, 3, 1),

            ("开方", "#704214", "#FFE6B3", 5, 0, 1),
            ("自乘", "#704214", "#FFE6B3", 5, 1, 1),
            ("圆周", "#704214", "#FFE6B3", 5, 2, 1),
            ("自然底数", "#704214", "#FFE6B3", 5, 3, 1),
        ]

        # 创建青铜浮雕按钮
        for text, bg_color, fg_color, row, col, span in btn_list:
            calc_btn = tk.Button(
                btn_container, text=text, font=btn_font,
                bg=bg_color, fg=fg_color, relief=tk.RAISED, bd=4,
                command=lambda t=text: self.button_click(t)
            )
            calc_btn.grid(row=row, column=col, columnspan=span, padx=5, pady=5, sticky="nsew")

        # 网格自适应
        for r in range(6):
            btn_container.rowconfigure(r, weight=1)
        for c in range(4):
            btn_container.columnconfigure(c, weight=1)

    def button_click(self, text):
        current_input = self.input_content.get()

        if text == "清盘":
            self.input_content.set("")
            self.result_content.set("零")
        elif text == "删字":
            self.input_content.set(current_input[:-1])
        elif text == "定算":
            try:
                expr = current_input.replace("乘", "*").replace("除", "/")
                res = eval(expr)
                self.result_content.set(str(res))
            except ZeroDivisionError:
                self.result_content.set("不可除以零")
            except SyntaxError:
                self.result_content.set("算式有误")
            except Exception:
                self.result_content.set("演算失败")
        elif text == "开方":
            try:
                num = float(current_input)
                if num < 0:
                    self.result_content.set("负数不可开方")
                else:
                    self.result_content.set(str(round(math.sqrt(num), 6)))
            except:
                self.result_content.set("先录入数字")
        elif text == "自乘":
            try:
                num = float(current_input)
                self.result_content.set(str(num ** 2))
            except:
                self.result_content.set("先录入数字")
        elif text == "圆周":
            self.input_content.set(current_input + str(round(math.pi, 8)))
        elif text == "自然底数":
            self.input_content.set(current_input + str(round(math.e, 8)))
        elif text == "折百":
            try:
                num = float(current_input)
                self.result_content.set(str(num / 100))
            except:
                self.result_content.set("先录入数字")
        else:
            char_map = {
                "零": "0", "壹": "1", "贰": "2", "叁": "3",
                "肆": "4", "伍": "5", "陆": "6", "柒": "7",
                "捌": "8", "玖": "9", "点": "."
            }
            real_char = char_map.get(text, text)
            self.input_content.set(current_input + real_char)

if __name__ == "__main__":
    win = tk.Tk()
    app = BronzeStyleCalculator(win)
    win.mainloop()