import tkinter as tk
from tkinter import font

# 创建主窗口
root = tk.Tk()
root.title("古风算筹计算器")
root.geometry("420x600")
root.resizable(False, False)
# 宣纸底色
root.configure(bg="#F5EEDC")

# 加载古风字体（系统无书法字体自动切换默认）
try:
    title_font = font.Font(family="楷体", size=24, weight="bold")
    num_font = font.Font(family="楷体", size=22)
    btn_font = font.Font(family="宋体", size=18)
except:
    title_font = font.Font(size=24, weight="bold")
    num_font = font.Font(size=22)
    btn_font = font.Font(size=18)

# 存储计算表达式
expression = ""

# 输入数字/符号函数
def button_click(item):
    global expression
    expression += str(item)
    input_text.set(expression)

# 清空屏幕
def button_clear():
    global expression
    expression = ""
    input_text.set("")

# 退格删除
def button_back():
    global expression
    expression = expression[:-1]
    input_text.set(expression)

# 计算结果
def button_equal():
    global expression
    try:
        # 运算求值
        result = str(eval(expression))
        # 去除末尾无效小数点
        if result.endswith(".0"):
            result = result[:-2]
        input_text.set(result)
        expression = result
    except ZeroDivisionError:
        input_text.set("除数不能为零")
        expression = ""
    except:
        input_text.set("算式有误")
        expression = ""

# 显示文本框变量
input_text = tk.StringVar()

# 顶部标题
title_label = tk.Label(
    root,
    text="古 风 算 器",
    font=title_font,
    bg="#F5EEDC",
    fg="#8C2318"  # 朱砂红文字
)
title_label.pack(pady=15)

# 显示输入输出框（红木纹边框）
display_frame = tk.Frame(root, bg="#8C2318", bd=6, relief=tk.RIDGE)
display_frame.pack(padx=20, pady=5, fill=tk.X)

display = tk.Entry(
    display_frame,
    textvariable=input_text,
    font=num_font,
    bg="#FFF9E8",
    fg="#2D2D2D",
    justify=tk.RIGHT,
    bd=0,
    insertbackground="#8C2318"
)
display.pack(ipady=12, padx=8)

# 按钮布局容器
btn_frame = tk.Frame(root, bg="#F5EEDC")
btn_frame.pack(pady=20, padx=10)

# 【修复】全部改为 activebackground，删除错误的 activebg
style_num = {"bg":"#FAF3E0", "fg":"#222222", "activebackground":"#E8D9C0"}    # 数字：浅宣纸
style_opt = {"bg":"#A6341B", "fg":"#FFFFFF", "activebackground":"#7A2514"}   # 运算符：朱砂红
style_func = {"bg":"#C4936B", "fg":"#FFFFFF", "activebackground":"#9E704E"}  # 清除/退格：木棕色
style_eq = {"bg":"#3A5F44", "fg":"#FFFFFF", "activebackground":"#294733"}    # 等于：墨绿

# 第一行：清除、退格、除号
btn_clear = tk.Button(btn_frame, text="清", width=4, height=2, font=btn_font, command=button_clear,**style_func)
btn_back = tk.Button(btn_frame, text="←", width=4, height=2, font=btn_font, command=button_back,**style_func)
btn_div = tk.Button(btn_frame, text="÷", width=4, height=2, font=btn_font, command=lambda:button_click("/"),**style_opt)

btn_clear.grid(row=0, column=0, padx=6, pady=6)
btn_back.grid(row=0, column=1, padx=6, pady=6)
btn_div.grid(row=0, column=2, padx=6, pady=6)

# 第二行：7 8 9 乘
btn7 = tk.Button(btn_frame, text="7", width=4, height=2, font=btn_font, command=lambda:button_click(7),**style_num)
btn8 = tk.Button(btn_frame, text="8", width=4, height=2, font=btn_font, command=lambda:button_click(8),**style_num)
btn9 = tk.Button(btn_frame, text="9", width=4, height=2, font=btn_font, command=lambda:button_click(9),**style_num)
btn_mul = tk.Button(btn_frame, text="×", width=4, height=2, font=btn_font, command=lambda:button_click("*"),**style_opt)

btn7.grid(row=1, column=0, padx=6, pady=6)
btn8.grid(row=1, column=1, padx=6, pady=6)
btn9.grid(row=1, column=2, padx=6, pady=6)
btn_mul.grid(row=1, column=3, padx=6, pady=6)

# 第三行：4 5 6 减
btn4 = tk.Button(btn_frame, text="4", width=4, height=2, font=btn_font, command=lambda:button_click(4),**style_num)
btn5 = tk.Button(btn_frame, text="5", width=4, height=2, font=btn_font, command=lambda:button_click(5),**style_num)
btn6 = tk.Button(btn_frame, text="6", width=4, height=2, font=btn_font, command=lambda:button_click(6),**style_num)
btn_sub = tk.Button(btn_frame, text="－", width=4, height=2, font=btn_font, command=lambda:button_click("-"),**style_opt)

btn4.grid(row=2, column=0, padx=6, pady=6)
btn5.grid(row=2, column=1, padx=6, pady=6)
btn6.grid(row=2, column=2, padx=6, pady=6)
btn_sub.grid(row=2, column=3, padx=6, pady=6)

# 第四行：1 2 3 加
btn1 = tk.Button(btn_frame, text="1", width=4, height=2, font=btn_font, command=lambda:button_click(1),**style_num)
btn2 = tk.Button(btn_frame, text="2", width=4, height=2, font=btn_font, command=lambda:button_click(2),**style_num)
btn3 = tk.Button(btn_frame, text="3", width=4, height=2, font=btn_font, command=lambda:button_click(3),**style_num)
btn_add = tk.Button(btn_frame, text="＋", width=4, height=2, font=btn_font, command=lambda:button_click("+"),**style_opt)

btn1.grid(row=3, column=0, padx=6, pady=6)
btn2.grid(row=3, column=1, padx=6, pady=6)
btn3.grid(row=3, column=2, padx=6, pady=6)
btn_add.grid(row=3, column=3, padx=6, pady=6)

# 第五行：0 . 等于
btn0 = tk.Button(btn_frame, text="0", width=9, height=2, font=btn_font, command=lambda:button_click(0),**style_num)
btn_dot = tk.Button(btn_frame, text="．", width=4, height=2, font=btn_font, command=lambda:button_click("."),**style_num)
btn_eq = tk.Button(btn_frame, text="＝", width=4, height=2, font=btn_font, command=button_equal,**style_eq)

btn0.grid(row=4, column=0, columnspan=2, padx=6, pady=6)
btn_dot.grid(row=4, column=2, padx=6, pady=6)
btn_eq.grid(row=4, column=3, padx=6, pady=6)

# 底部落款
foot_label = tk.Label(
    root,
    text="—— 文房算筹 ——",
    font=font.Font(size=14),
    bg="#F5EEDC",
    fg="#664433"
)
foot_label.pack(pady=30)

# 主循环
root.mainloop()