import tkinter as tk
from tkinter import ttk

# 数学公式库 可以自己无限加
math_formula = {
    "圆面积": "S = πr²\nS：面积，r：半径",
    "圆周长": "C = 2πr\nC：周长，r：半径",
    "三角形面积": "S = 1/2 × 底 × 高",
    "长方形面积": "S = 长 × 宽",
    "正方形面积": "S = 边长²",
    "梯形面积": "S = (上底 + 下底) × 高 ÷ 2",
    "勾股定理": "a² + b² = c²\n直角三角形两直角边平方和=斜边平方",
    "一元二次方程求根": "x = [-b ± √(b²-4ac)] / 2a",
    "完全平方和": "(a+b)² = a² + 2ab + b²",
    "完全平方差": "(a-b)² = a² - 2ab + b²",
    "平方差公式": "a² - b² = (a+b)(a-b)",
    "等差数列求和": "Sn = n(a1+an)/2",
    "等比数列求和": "Sn = a1(1-qⁿ)/(1-q)  (q≠1)"
}

class MathFormulaQuery:
    def __init__(self, root):
        self.root = root
        self.root.title("004.数学公式查询工具")
        self.root.geometry("650x500")
        
        # 所有公式名称列表
        self.all_keys = list(math_formula.keys())
        
        self.setup_ui()

    def setup_ui(self):
        # 标题
        title = ttk.Label(self.root, text="数学公式查询", font=("微软雅黑", 20, "bold"))
        title.pack(pady=10)

        # 搜索框
        ttk.Label(self.root, text="输入关键词搜索：", font=("微软雅黑", 12)).pack()
        self.search_var = tk.StringVar()
        self.search_entry = ttk.Entry(self.root, textvariable=self.search_var, font=("微软雅黑", 12), width=40)
        self.search_entry.pack(pady=5)
        self.search_entry.bind("<KeyRelease>", self.search_formula)

        # 左右布局：左边列表 右边公式展示
        frame = ttk.Frame(self.root)
        frame.pack(fill=tk.BOTH, expand=True, padx=20, pady=10)

        # 左侧公式列表
        self.listbox = tk.Listbox(frame, font=("微软雅黑", 12), width=20, height=15)
        self.listbox.grid(row=0, column=0, padx=10)
        # 绑定点击事件
        self.listbox.bind("<<ListboxSelect>>", self.show_formula)

        # 右侧公式显示文本框
        self.show_text = tk.Text(frame, font=("微软雅黑", 13), width=40, height=15)
        self.show_text.grid(row=0, column=1, padx=10)

        # 初始化列表
        self.refresh_list(self.all_keys)

    # 刷新列表
    def refresh_list(self, key_list):
        self.listbox.delete(0, tk.END)
        for k in key_list:
            self.listbox.insert(tk.END, k)

    # 搜索公式
    def search_formula(self, event):
        key = self.search_var.get().strip()
        if not key:
            self.refresh_list(self.all_keys)
            return
        # 模糊匹配
        res = [k for k in self.all_keys if key in k]
        self.refresh_list(res)

    # 选中显示公式
    def show_formula(self, event):
        idx = self.listbox.curselection()
        if not idx:
            return
        name = self.listbox.get(idx[0])
        formula = math_formula.get(name, "暂无该公式")
        
        self.show_text.delete(1.0, tk.END)
        self.show_text.insert(tk.END, f"【{name}】\n\n{formula}")

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