import tkinter as tk
from tkinter import ttk

# 创建主窗口
root = tk.Tk()
root.title("数学公式查询")
root.geometry("600x500")

# 公式数据
formulas = [
    {"name": "一元二次方程", "category": "代数", "formula": "x = (-b ± √(b²-4ac))/2a"},
    {"name": "勾股定理", "category": "几何", "formula": "a² + b² = c²"},
    {"name": "圆的面积", "category": "几何", "formula": "S = πr²"},
    {"name": "完全平方公式", "category": "代数", "formula": "(a+b)² = a²+2ab+b²"},
    {"name": "等差数列求和", "category": "代数", "formula": "Sₙ = n(a₁+aₙ)/2"}
]

# 搜索功能
def search_formulas():
    keyword = search_var.get().lower()
    formula_list.delete(0, tk.END)
    
    for formula in formulas:
        if keyword in formula["name"].lower() or keyword in formula["formula"].lower():
            formula_list.insert(tk.END, formula["name"])

# 显示详情
def show_details(event=None):
    selection = formula_list.curselection()
    if not selection:
        return
    
    index = selection[0]
    formula_name = formula_list.get(index)
    
    for formula in formulas:
        if formula["name"] == formula_name:
            detail_text.config(state=tk.NORMAL)
            detail_text.delete(1.0, tk.END)
            detail_text.insert(tk.END, f"名称: {formula['name']}\n")
            detail_text.insert(tk.END, f"分类: {formula['category']}\n")
            detail_text.insert(tk.END, f"公式: {formula['formula']}")
            detail_text.config(state=tk.DISABLED)
            break

# 搜索框
search_frame = ttk.Frame(root)
search_frame.pack(pady=10, padx=10, fill=tk.X)

ttk.Label(search_frame, text="搜索:").pack(side=tk.LEFT, padx=5)
search_var = tk.StringVar()
search_var.trace("w", lambda *args: search_formulas())
search_entry = ttk.Entry(search_frame, textvariable=search_var, width=30)
search_entry.pack(side=tk.LEFT, padx=5)

# 主内容区
content_frame = ttk.Frame(root)
content_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=5)

# 左侧列表
list_frame = ttk.LabelFrame(content_frame, text="公式列表")
list_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=(0, 5))

formula_list = tk.Listbox(list_frame, font=("Arial", 12))
formula_list.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

scrollbar = ttk.Scrollbar(list_frame, orient=tk.VERTICAL, command=formula_list.yview)
formula_list.configure(yscrollcommand=scrollbar.set)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

# 绑定事件
formula_list.bind("<<ListboxSelect>>", show_details)

# 右侧详情
detail_frame = ttk.LabelFrame(content_frame, text="公式详情")
detail_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)

detail_text = tk.Text(detail_frame, height=10, font=("Courier New", 14))
detail_text.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)
detail_text.config(state=tk.DISABLED)

# 底部信息
bottom_frame = ttk.Frame(root)
bottom_frame.pack(fill=tk.X, padx=10, pady=5)

info_label = ttk.Label(bottom_frame, text="共 5 个数学公式")
info_label.pack(side=tk.LEFT)

# 加载数据
for formula in formulas:
    formula_list.insert(tk.END, formula["name"])

# 运行程序
root.mainloop()