import tkinter as tk
from tkinter import ttk, scrolledtext

# ===================== 数学公式数据库 =====================
formula_data = [
    {
        "category": "代数",
        "name": "一元二次方程求根公式",
        "formula": "x = [-b ± √(b²-4ac)] / 2a",
        "desc": "方程 ax²+bx+c=0 的解，判别式Δ=b²-4ac"
    },
    {
        "category": "代数",
        "name": "平方差公式",
        "formula": "a² - b² = (a+b)(a-b)",
        "desc": "两个数平方的差等于和乘差"
    },
    {
        "category": "代数",
        "name": "完全平方和",
        "formula": "(a+b)² = a² + 2ab + b²",
        "desc": "两数之和的平方展开式"
    },
    {
        "category": "代数",
        "name": "完全平方差",
        "formula": "(a-b)² = a² - 2ab + b²",
        "desc": "两数之差的平方展开式"
    },
    {
        "category": "几何",
        "name": "三角形面积",
        "formula": "S = 1/2 × 底 × 高",
        "desc": "普通三角形面积计算公式"
    },
    {
        "category": "几何",
        "name": "圆面积",
        "formula": "S = πr²",
        "desc": "r为圆半径"
    },
    {
        "category": "几何",
        "name": "圆周长",
        "formula": "C = 2πr",
        "desc": "r为圆半径"
    },
    {
        "category": "几何",
        "name": "梯形面积",
        "formula": "S = (上底+下底)×高 ÷ 2",
        "desc": "梯形面积计算公式"
    },
    {
        "category": "三角函数",
        "name": "正弦定义",
        "formula": "sinα = 对边 / 斜边",
        "desc": "直角三角形三角函数"
    },
    {
        "category": "三角函数",
        "name": "余弦定义",
        "formula": "cosα = 邻边 / 斜边",
        "desc": "直角三角形三角函数"
    },
    {
        "category": "三角函数",
        "name": "正切定义",
        "formula": "tanα = 对边 / 邻边",
        "desc": "直角三角形三角函数"
    },
    {
        "category": "微积分",
        "name": "幂函数求导",
        "formula": "(xⁿ)' = n·xⁿ⁻¹",
        "desc": "基本导数公式"
    },
    {
        "category": "微积分",
        "name": "常数积分",
        "formula": "∫k dx = kx + C",
        "desc": "k为常数，C为积分常数"
    }
]


class FormulaQueryApp:
    def __init__(self, root):
        self.root = root
        self.root.title("数学公式查询工具")
        self.root.geometry("720x520")
        self.root.resizable(True, True)

        # 顶部搜索区域
        frame_top = ttk.Frame(root, padding=10)
        frame_top.pack(fill=tk.X)

        ttk.Label(frame_top, text="搜索公式：").pack(side=tk.LEFT)
        self.search_var = tk.StringVar()
        search_entry = ttk.Entry(frame_top, textvariable=self.search_var, width=40)
        search_entry.pack(side=tk.LEFT, padx=8)
        search_btn = ttk.Button(frame_top, text="查询", command=self.search_formula)
        search_btn.pack(side=tk.LEFT)

        # 分类筛选按钮
        frame_filter = ttk.Frame(root, padding=(10, 0, 10, 5))
        frame_filter.pack(fill=tk.X)
        ttk.Label(frame_filter, text="分类筛选：").pack(side=tk.LEFT)
        ttk.Button(frame_filter, text="全部", command=lambda: self.show_all()).pack(side=tk.LEFT, padx=3)
        ttk.Button(frame_filter, text="代数", command=lambda: self.filter_cat("代数")).pack(side=tk.LEFT, padx=3)
        ttk.Button(frame_filter, text="几何", command=lambda: self.filter_cat("几何")).pack(side=tk.LEFT, padx=3)
        ttk.Button(frame_filter, text="三角函数", command=lambda: self.filter_cat("三角函数")).pack(side=tk.LEFT, padx=3)
        ttk.Button(frame_filter, text="微积分", command=lambda: self.filter_cat("微积分")).pack(side=tk.LEFT, padx=3)

        # 修复点：删除 padding=8
        self.result_text = scrolledtext.ScrolledText(root, font=("Microsoft YaHei", 11))
        self.result_text.pack(fill=tk.BOTH, expand=True, padx=10, pady=5)

        # 初始展示全部公式
        self.show_all()

    # 清空文本框
    def clear_text(self):
        self.result_text.delete(1.0, tk.END)

    # 写入内容
    def write_content(self, formula_list):
        self.clear_text()
        if not formula_list:
            self.result_text.insert(tk.END, "未找到匹配的公式！\n尝试更换关键词搜索")
            return
        for item in formula_list:
            self.result_text.insert(tk.END, f"【{item['category']}】{item['name']}\n")
            self.result_text.insert(tk.END, f"公式：{item['formula']}\n")
            self.result_text.insert(tk.END, f"说明：{item['desc']}\n")
            self.result_text.insert(tk.END, "-" * 60 + "\n\n")

    # 展示全部公式
    def show_all(self):
        self.write_content(formula_data)

    # 按分类筛选
    def filter_cat(self, cat_name):
        res = [f for f in formula_data if f["category"] == cat_name]
        self.write_content(res)

    # 搜索功能
    def search_formula(self):
        keyword = self.search_var.get().strip().lower()
        if not keyword:
            self.show_all()
            return
        result = []
        for f in formula_data:
            # 在名称、公式、说明中匹配关键词
            text_all = (f["name"] + f["formula"] + f["desc"]).lower()
            if keyword in text_all:
                result.append(f)
        self.write_content(result)


if __name__ == "__main__":
    main_window = tk.Tk()
    app = FormulaQueryApp(main_window)
    main_window.mainloop()