import tkinter as tk
from tkinter import ttk, messagebox

# 数学公式库
formula_data = [
    {"name":"一元二次方程求根","formula":"x = [-b ± √(b²-4ac)] / 2a","desc":"ax²+bx+c=0，判别式Δ=b²‑4ac"},
    {"name":"平方差公式","formula":"a²‑b² = (a+b)(a‑b)","desc":"因式分解常用公式"},
    {"name":"完全平方和","formula":"(a+b)² = a²+2ab+b²","desc":"和的平方展开"},
    {"name":"完全平方差","formula":"(a‑b)² = a²‑2ab+b²","desc":"差的平方展开"},
    {"name":"三角形面积","formula":"S = 1/2 * a * h","desc":"a为底，h为高"},
    {"name":"圆面积","formula":"S = πr²","desc":"r是圆的半径"},
    {"name":"圆周长","formula":"C = 2πr","desc":"r是圆的半径"},
    {"name":"梯形面积","formula":"S=(a+b)/2 * h","desc":"a上底，b下底，h高"},
    {"name":"勾股定理","formula":"a² + b² = c²","desc":"直角三角形，c斜边"},
    {"name":"等差数列求和","formula":"Sn = n(a1+an)/2","desc":"n项，首项a1，末项an"}
]


class FormulaQuery:
    def __init__(self, root):
        self.root = root
        self.root.title("数学公式查询工具")
        self.root.geometry("520x420")

        # 搜索框
        ttk.Label(root,text="搜索公式：").pack(anchor="w",padx=10,pady=5)
        self.search_var = tk.StringVar()
        search_entry = ttk.Entry(root,textvariable=self.search_var)
        search_entry.pack(fill="x",padx=10)
        search_entry.bind("<KeyRelease>",self.search_formula)

        # 列表框
        ttk.Label(root,text="公式列表(点击查看详情)").pack(anchor="w",padx=10,pady=(8,2))
        self.listbox = tk.Listbox(root,font=("微软雅黑",11))
        self.listbox.pack(fill="both",expand=True,padx=10,pady=2)
        self.listbox.bind("<<ListboxSelect>>",self.show_detail)

        # 详情显示区域
        frame_detail = ttk.LabelFrame(root,text="公式详情")
        frame_detail.pack(fill="x",padx=10,pady=8)

        self.var_formula = tk.StringVar()
        self.var_desc = tk.StringVar()

        ttk.Label(frame_detail,textvariable=self.var_formula,font=("微软雅黑",14)).pack(pady=4)
        ttk.Label(frame_detail,textvariable=self.var_desc,font=("微软雅黑",10),foreground="#444444").pack(pady=2)

        self.all_items = formula_data
        self.refresh_list(self.all_items)

    def refresh_list(self,data_list):
        """刷新列表"""
        self.listbox.delete(0,tk.END)
        for item in data_list:
            self.listbox.insert(tk.END,item["name"])

    def search_formula(self,event):
        """搜索过滤"""
        key = self.search_var.get().lower()
        filter_list = []
        for f in self.all_items:
            if key in f["name"].lower() or key in f["formula"].lower() or key in f["desc"].lower():
                filter_list.append(f)
        self.refresh_list(filter_list)

    def show_detail(self,event):
        """点击列表，展示公式详情"""
        index = self.listbox.curselection()
        if not index:
            return
        idx = index[0]
        text_name = self.listbox.get(idx)
        #找到对应数据
        for f in self.all_items:
            if f["name"] == text_name:
                self.var_formula.set(f["formula"])
                self.var_desc.set("说明："+f["desc"])
                return


if __name__ == "__main__":
    window = tk.Tk()
    app = FormulaQuery(window)
    window.mainloop()
