import tkinter as tk
from tkinter import ttk, messagebox

class MathFormulaApp:
    def __init__(self, root):
        self.root = root
        self.root.title("数学公式查询器 v1.0")
        self.root.geometry("600x450")

        # 模拟数据库：包含名称、公式和描述
        self.formula_db = [
            {"name": "勾股定理", "category": "几何", "formula": "a² + b² = c²", "desc": "直角三角形两条直角边的平方和等于斜边的平方。"},
            {"name": "圆面积公式", "category": "几何", "formula": "S = πr²", "desc": "r 是圆的半径。"},
            {"name": "一元二次方程求根公式", "category": "代数", "formula": "x = [-b ± √(b² - 4ac)] / 2a", "desc": "用于求解 ax² + bx + c = 0 的根。"},
            {"name": "欧拉公式", "category": "分析", "formula": "e^(iπ) + 1 = 0", "desc": "数学中最完美的公式之一。"},
            {"name": "牛顿第二定律", "category": "物理数学", "formula": "F = ma", "desc": "力等于质量乘以加速度。"},
            {"name": "等差数列通项", "category": "代数", "formula": "an = a1 + (n-1)d", "desc": "d 为公差。"},
            {"name": "正弦定理", "category": "三角", "formula": "a/sinA = b/sinB = c/sinC = 2R", "desc": "描述三角形边长与对角正弦值的关系。"},
        ]

        self.setup_ui()

    def setup_ui(self):
        # 搜索栏
        search_frame = tk.Frame(self.root, pady=10)
        search_frame.pack(fill=tk.X)
        
        tk.Label(search_frame, text="搜索公式: ").pack(side=tk.LEFT, padx=10)
        self.search_var = tk.StringVar()
        self.search_var.trace("w", self.update_list) # 监听输入自动过滤
        self.search_entry = tk.Entry(search_frame, textvariable=self.search_var)
        self.search_entry.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=5)

        # 主体布局
        main_paned = tk.PanedWindow(self.root, orient=tk.HORIZONTAL)
        main_paned.pack(fill=tk.BOTH, expand=True, padx=10, pady=5)

        # 左侧列表框
        self.listbox = tk.Listbox(main_paned, width=25)
        self.listbox.bind('<<ListboxSelect>>', self.show_details)
        main_paned.add(self.listbox)

        # 右侧详情面板
        detail_frame = tk.Frame(main_paned, bg="white", padx=10, pady=10)
        main_paned.add(detail_frame)

        self.name_label = tk.Label(detail_frame, text="请选择一个公式", font=("微软雅黑", 14, "bold"), bg="white")
        self.name_label.pack(anchor="w")

        self.formula_text = tk.Label(detail_frame, text="", font=("Cambria", 18, "italic"), fg="blue", bg="white", pady=20)
        self.formula_text.pack(anchor="center")

        self.desc_label = tk.Label(detail_frame, text="", wraplength=300, justify="left", bg="white")
        self.desc_label.pack(anchor="w")

        # 初始化列表
        self.update_list()

    def update_list(self, *args):
        search_term = self.search_var.get().lower()
        self.listbox.delete(0, tk.END)
        self.filtered_data = [
            f for f in self.formula_db 
            if search_term in f['name'].lower() or search_term in f['category'].lower()
        ]
        for item in self.filtered_data:
            self.listbox.insert(tk.END, f"[{item['category']}] {item['name']}")

    def show_details(self, event):
        selection = self.listbox.curselection()
        if selection:
            index = selection[0]
            data = self.filtered_data[index]
            self.name_label.config(text=data['name'])
            self.formula_text.config(text=data['formula'])
            self.desc_label.config(text=f"说明：\n{data['desc']}")

if __name__ == "__main__":
    root = tk.Tk()
    app = MathFormulaApp(root)
    root.mainloop()