import tkinter as tk
from tkinter import scrolledtext

# 公式数据库
formula_database = {
    "代数": {
        "完全平方和": "(a+b)² = a² + 2ab + b²",
        "完全平方差": "(a-b)² = a² - 2ab + b²",
        "平方差": "a² - b² = (a+b)(a-b)",
        "一元二次方程求根": "ax²+bx+c=0\nx=(-b±√(b²-4ac))/2a",
        "等差数列通项": "aₙ = a₁ + (n-1)d",
        "等比数列通项": "aₙ = a₁·qⁿ⁻¹"
    },
    "平面几何": {
        "三角形面积": "S = 底×高÷2",
        "矩形面积": "S = 长×宽",
        "正方形面积": "S = 边长²",
        "圆周长": "C = 2πr",
        "圆面积": "S = πr²",
        "梯形面积": "S = (上底+下底)×高÷2",
        "勾股定理": "a² + b² = c²（直角三角形）"
    },
    "立体几何": {
        "正方体体积": "V = 边长³",
        "长方体体积": "V = 长×宽×高",
        "圆柱体积": "V = πr²h",
        "圆锥体积": "V = 1/3 πr²h",
        "球体积": "V = 4/3 πr³"
    },
    "三角函数": {
        "平方关系": "sin²θ + cos²θ = 1",
        "和角正弦": "sin(A+B) = sinAcosB+cosAsinB",
        "和角余弦": "cos(A+B) = cosAcosB-sinAsinB"
    },
    "微积分": {
        "常数导数": "(C)' = 0",
        "幂函数导数": "(xⁿ)' = n·xⁿ⁻¹",
        "sinx导数": "(sinx)' = cosx",
        "cosx导数": "(cosx)' = -sinx"
    }
}


class MathFormulaApp:
    def __init__(self, root):
        self.root = root
        self.root.title("数学公式查询工具")
        self.root.geometry("750x550")

        # 顶部标题
        title = tk.Label(root, text="数学公式查询", font=("微软雅黑", 18, "bold"))
        title.pack(pady=10)

        # 搜索栏
        frame_top = tk.Frame(root)
        frame_top.pack(pady=5)

        tk.Label(frame_top, text="输入关键词：", font=(
            "微软雅黑", 11)).grid(row=0, column=0, padx=5)
        self.entry = tk.Entry(frame_top, width=35, font=("微软雅黑", 11))
        self.entry.grid(row=0, column=1, padx=5)

        btn_search = tk.Button(frame_top, text="搜索", command=self.search,
                               width=8, bg="#409EFF", fg="white")
        btn_search.grid(row=0, column=2, padx=5)

        btn_clear = tk.Button(frame_top, text="清空", command=self.clear_text,
                              width=8, bg="#cccccc")
        btn_clear.grid(row=0, column=3, padx=5)

        # 分类按钮区域
        frame_btn = tk.Frame(root)
        frame_btn.pack(pady=8)
        categories = list(formula_database.keys())
        for idx, cate in enumerate(categories):
            btn = tk.Button(frame_btn, text=cate, width=10,
                            command=lambda c=cate: self.show_category(c))
            btn.grid(row=0, column=idx, padx=3)

        # 结果显示文本框
        self.text_box = scrolledtext.ScrolledText(
            root, width=85, height=20, font=("微软雅黑", 11))
        self.text_box.pack(pady=10)

    # 按分类展示
    def show_category(self, category):
        self.clear_text()
        data = formula_database[category]
        self.text_box.insert(tk.END, f"===== 【{category}】 =====\n\n")
        for name, formula in data.items():
            self.text_box.insert(tk.END, f"● {name}\n{formula}\n\n")

    # 关键词搜索
    def search(self):
        key = self.entry.get().strip()
        if not key:
            self.text_box.insert(tk.END, "请输入搜索关键词！\n")
            return
        self.clear_text()
        has_result = False
        for cate, items in formula_database.items():
            for name, formula in items.items():
                if key in name or key in formula:
                    self.text_box.insert(
                        tk.END, f"【{cate}】{name}\n{formula}\n\n")
                    has_result = True
        if not has_result:
            self.text_box.insert(tk.END, "未找到相关公式！\n")

    # 清空内容
    def clear_text(self):
        self.text_box.delete(1.0, tk.END)


if __name__ == "__main__":
    win = tk.Tk()
    app = MathFormulaApp(win)
    win.mainloop()
