import tkinter as tk
from tkinter import font, messagebox

# 数学公式数据库（小学+初中常用公式，可自行扩展）
formula_data = [
    {
        "category": "平面几何",
        "name": "长方形周长",
        "keyword": "长方形 周长",
        "formula": "C = 2(a + b)\nC：周长，a：长，b：宽"
    },
    {
        "category": "平面几何",
        "name": "长方形面积",
        "keyword": "长方形 面积",
        "formula": "S = a × b\nS：面积，a：长，b：宽"
    },
    {
        "category": "平面几何",
        "name": "正方形周长",
        "keyword": "正方形 周长",
        "formula": "C = 4a\na：边长"
    },
    {
        "category": "平面几何",
        "name": "正方形面积",
        "keyword": "正方形 面积",
        "formula": "S = a²\na：边长"
    },
    {
        "category": "平面几何",
        "name": "三角形面积",
        "keyword": "三角形 面积",
        "formula": "S = (a × h) ÷ 2\na：底，h：高"
    },
    {
        "category": "平面几何",
        "name": "圆周长",
        "keyword": "圆 周长",
        "formula": "C = 2πr = πd\nr：半径，d：直径，π≈3.14"
    },
    {
        "category": "平面几何",
        "name": "圆面积",
        "keyword": "圆 面积",
        "formula": "S = πr²\nr：半径"
    },
    {
        "category": "立体几何",
        "name": "长方体体积",
        "keyword": "长方体 体积",
        "formula": "V = a × b × h\na长 b宽 h高"
    },
    {
        "category": "立体几何",
        "name": "正方体体积",
        "keyword": "正方体 体积",
        "formula": "V = a³\na：棱长"
    },
    {
        "category": "立体几何",
        "name": "圆柱体积",
        "keyword": "圆柱 体积",
        "formula": "V = πr²h\nr底面半径 h高"
    },
    {
        "category": "代数运算",
        "name": "完全平方和",
        "keyword": "完全平方 和",
        "formula": "(a+b)² = a² + 2ab + b²"
    },
    {
        "category": "代数运算",
        "name": "完全平方差",
        "keyword": "完全平方 差",
        "formula": "(a-b)² = a² - 2ab + b²"
    },
    {
        "category": "代数运算",
        "name": "平方差公式",
        "keyword": "平方差",
        "formula": "a² - b² = (a+b)(a-b)"
    },
    {
        "category": "一次函数",
        "name": "一次函数通用式",
        "keyword": "一次函数",
        "formula": "y = kx + b\nk斜率，b截距；k≠0"
    },
    {
        "category": "方程",
        "name": "一元二次方程求根公式",
        "keyword": "一元二次 求根",
        "formula": "ax²+bx+c=0\nx = [-b ± √(b²-4ac)] / 2a"
    }
]

# 分类列表
category_list = ["全部", "平面几何", "立体几何", "代数运算", "一次函数", "方程"]

# 主窗口
root = tk.Tk()
root.title("古风数学公式查询手册")
root.geometry("660x700")
root.resizable(False, False)
root.configure(bg="#F5EEDC")  # 宣纸底色

# 字体兼容
try:
    title_font = font.Font(family="楷体", size=24, weight="bold")
    label_font = font.Font(family="宋体", size=14)
    formula_font = font.Font(family="楷体", size=16)
    btn_font = font.Font(family="宋体", size=13)
except:
    title_font = font.Font(size=24, weight="bold")
    label_font = font.Font(size=14)
    formula_font = font.Font(size=16)
    btn_font = font.Font(size=13)

# 全局变量
select_category = tk.StringVar(value="全部")
search_text = tk.StringVar()

# 搜索查询函数
def search_formula():
    key = search_text.get().strip()
    cat = select_category.get()
    result_text.delete(1.0, tk.END)
    find_list = []

    # 筛选分类+关键词
    for item in formula_data:
        # 分类筛选
        if cat != "全部" and item["category"] != cat:
            continue
        # 关键词匹配
        if key in item["name"] or key in item["keyword"]:
            find_list.append(item)

    if len(find_list) == 0:
        result_text.insert(tk.END, "未查询到匹配公式\n请更换关键词或分类！")
        return

    # 展示所有匹配公式
    for idx, data in enumerate(find_list):
        result_text.insert(tk.END, f"【{data['category']}】{data['name']}\n")
        result_text.insert(tk.END, f"{data['formula']}\n")
        result_text.insert(tk.END, "————————————————————\n\n")

# 清空输入与结果
def clear_all():
    search_text.set("")
    select_category.set("全部")
    result_text.delete(1.0, tk.END)

# ------------------- 界面布局 -------------------
# 顶部标题
tk.Label(
    root, text="数学公式查询手册",
    font=title_font, bg="#F5EEDC", fg="#8C2318"
).pack(pady=15)

# 搜索筛选区域
search_frame = tk.Frame(root, bg="#F5EEDC")
search_frame.pack(pady=8)

# 分类下拉框
tk.Label(search_frame, text="分类：", font=label_font, bg="#F5EEDC", fg="#442E1F").grid(row=0, column=0, padx=5)
cat_menu = tk.OptionMenu(search_frame, select_category, *category_list)
cat_menu.config(font=label_font, bg="#FFF9E8")
cat_menu.grid(row=0, column=1, padx=5)

# 搜索输入框
tk.Label(search_frame, text="关键词：", font=label_font, bg="#F5EEDC", fg="#442E1F").grid(row=0, column=2, padx=5)
entry_search = tk.Entry(search_frame, textvariable=search_text, font=label_font, width=16, bg="#FFF9E8")
entry_search.grid(row=0, column=3, padx=5)

# 按钮区域
btn_frame = tk.Frame(root, bg="#F5EEDC")
btn_frame.pack(pady=10)
style_red = {"bg":"#A6341B", "fg":"white", "activebackground":"#7A2514"}
style_brown = {"bg":"#C4936B", "fg":"white", "activebackground":"#9E704E"}

tk.Button(btn_frame, text="查询公式", font=btn_font, command=search_formula, width=10,**style_red).grid(row=0, column=0, padx=12)
tk.Button(btn_frame, text="清空重置", font=btn_font, command=clear_all, width=10,**style_brown).grid(row=0, column=1, padx=12)

# 公式展示框（朱砂红木边框）
text_box_frame = tk.Frame(root, bg="#8C2318", bd=7, relief=tk.RIDGE)
text_box_frame.pack(padx=25, pady=10, fill=tk.BOTH, expand=True)

result_text = tk.Text(
    text_box_frame, width=45, height=16,
    font=formula_font, bg="#FFF9E8", fg="#222222",
    bd=0, padx=15, pady=15
)
result_text.pack(fill=tk.BOTH, expand=True)

# 底部落款
tk.Label(
    root, text="文房数理 · 公式速查",
    font=font.Font(size=12), bg="#F5EEDC", fg="#664433"
).pack(pady=18)

root.mainloop()