import tkinter as tk
from tkinter import ttk, scrolledtext

# 数学公式库（可自行添加）
MATH_FORMULAS = {
    # 代数公式
    "完全平方公式": "(a+b)² = a²+2ab+b²\n(a-b)² = a²-2ab+b²",
    "平方差公式": "a² - b² = (a+b)(a-b)",
    "一元二次方程求根公式": "ax²+bx+c=0\nx = [-b±√(b²-4ac)]/(2a)",
    "等差数列通项": "an = a1 + (n-1)d",
    "等差数列求和": "Sn = n(a1+an)/2",

    # 几何公式
    "圆周长": "C = 2πr",
    "圆面积": "S = πr²",
    "矩形面积": "S = 长×宽",
    "三角形面积": "S = 底×高÷2",
    "正方体体积": "V = a³",
    "长方体体积": "V = 长×宽×高",

    # 三角函数
    "正弦定理": "a/sinA = b/sinB = c/sinC = 2R",
    "余弦定理": "c² = a²+b²-2ab·cosC",
    "sin²+cos²=1": "sin²α + cos²α = 1"
}


class MathFormulaApp:
    def __init__(self, root):
        self.root = root
        self.root.title("数学公式查询工具")
        self.root.geometry("650x500")  # 窗口大小
        self.root.resizable(False, False)

        

        # 搜索框区域
        search_frame = ttk.Frame(root)
        search_frame.pack(pady=5, fill=tk.X, padx=20)

        ttk.Label(search_frame, text="搜索公式：", font=(
            "微软雅黑", 11)).pack(side=tk.LEFT, padx=5)
        self.search_entry = ttk.Entry(search_frame, font=("微软雅黑", 11))
        self.search_entry.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=5)
        self.search_entry.bind("<KeyRelease>", self.search_formula)  # 实时搜索

        # 公式列表
        list_frame = ttk.LabelFrame(root, text="公式列表", padding=10)
        list_frame.pack(pady=5, fill=tk.BOTH, padx=20, expand=True)

        # 滚动列表
        self.formula_list = tk.Listbox(list_frame, font=("微软雅黑", 10), height=8)
        scrollbar = ttk.Scrollbar(
            list_frame, orient=tk.VERTICAL, command=self.formula_list.yview)
        self.formula_list.config(yscrollcommand=scrollbar.set)
        scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
        self.formula_list.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

        # 绑定点击事件
        self.formula_list.bind("<<ListboxSelect>>", self.show_detail)

        # 公式详情展示区
        detail_frame = ttk.LabelFrame(root, text="公式详情", padding=10)
        detail_frame.pack(pady=5, fill=tk.BOTH, padx=20, expand=True)

        self.detail_text = scrolledtext.ScrolledText(
            detail_frame, font=("微软雅黑", 11),
            width=60, height=6,
            state=tk.DISABLED  # 默认不可编辑
        )
        self.detail_text.pack(fill=tk.BOTH, expand=True)

        # 初始化加载所有公式名称
        self.load_all_formulas()

    # 加载所有公式到列表
    def load_all_formulas(self):
        self.formula_list.delete(0, tk.END)
        for name in MATH_FORMULAS.keys():
            self.formula_list.insert(tk.END, name)

    # 搜索功能
    def search_formula(self, event):
        keyword = self.search_entry.get().strip()
        self.formula_list.delete(0, tk.END)

        # 模糊匹配
        for name in MATH_FORMULAS.keys():
            if keyword in name:
                self.formula_list.insert(tk.END, name)

    # 显示选中的公式详情
    def show_detail(self, event):
        selected = self.formula_list.curselection()
        if selected:
            index = selected[0]
            formula_name = self.formula_list.get(index)
            formula_content = MATH_FORMULAS[formula_name]

            # 启用编辑→写入内容→禁用编辑
            self.detail_text.config(state=tk.NORMAL)
            self.detail_text.delete(1.0, tk.END)
            self.detail_text.insert(
                tk.END, f"【{formula_name}】\n\n{formula_content}")
            self.detail_text.config(state=tk.DISABLED)


if __name__ == "__main__":
    root = tk.Tk()
    app = MathFormulaApp(root)
    root.mainloop()
