import tkinter as tk
from tkinter import ttk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

class MathFormulaApp:
    def __init__(self, root):
        self.root = root
        self.root.title("数学公式桌面查询系统")
        self.root.geometry("600x500")

        # 1. 公式数据库 (支持 LaTeX 格式)
        self.formula_db = {
            "勾股定理": r"$a^2 + b^2 = c^2$",
            "圆面积": r"$S = \pi r^2$",
            "一元二次方程求根": r"$x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$",
            "欧拉公式": r"$e^{i\pi} + 1 = 0$",
            "牛顿第二定律": r"$F = ma$",
            "正弦定理": r"$\frac{a}{\sin A} = \frac{b}{\sin B} = \frac{c}{\sin C}$",
            "导数定义": r"$f'(x) = \lim_{\Delta x \to 0} \frac{f(x+\Delta x) - f(x)}{\Delta x}$",
            "不定积分": r"$\int x^n dx = \frac{x^{n+1}}{n+1} + C$",
            "矩阵乘法": r"$C_{ij} = \sum_{k=1}^n A_{ik}B_{kj}$"
        }

        # 2. 界面布局
        # 上部分：搜索栏
        search_frame = tk.Frame(self.root)
        search_frame.pack(pady=20)

        tk.Label(search_frame, text="输入关键词:", font=("微软雅黑", 12)).pack(side=tk.LEFT)
        self.search_var = tk.StringVar()
        self.search_entry = tk.Entry(search_frame, textvariable=self.search_var, font=("微软雅黑", 12))
        self.search_entry.pack(side=tk.LEFT, padx=10)
        
        search_btn = tk.Button(search_frame, text="查询", command=self.search_formula, bg="#0078d7", fg="white")
        search_btn.pack(side=tk.LEFT)

        # 中部分：列表选择
        list_frame = tk.Frame(self.root)
        list_frame.pack(pady=10)
        
        tk.Label(list_frame, text="或从列表选择:").pack()
        self.combo = ttk.Combobox(list_frame, values=list(self.formula_db.keys()), state="readonly", width=30)
        self.combo.pack(pady=5)
        self.combo.bind("<<ComboboxSelected>>", self.on_combo_select)

        # 下部分：公式显示区域 (使用 Matplotlib)
        self.fig, self.ax = plt.subplots(figsize=(5, 2))
        self.canvas = FigureCanvasTkAgg(self.fig, master=self.root)
        self.canvas.get_tk_widget().pack(pady=20)
        self.ax.axis('off') # 隐藏坐标轴

    def display_math(self, latex_str):
        """在窗口中渲染数学公式"""
        self.ax.clear()
        self.ax.axis('off')
        # 在画布中心绘制文本
        self.ax.text(0.5, 0.5, latex_str, size=20, color="blue", 
                     horizontalalignment='center', verticalalignment='center')
        self.canvas.draw()

    def search_formula(self):
        """搜索按钮逻辑"""
        query = self.search_var.get().strip()
        if query in self.formula_db:
            self.display_math(self.formula_db[query])
        else:
            self.ax.clear()
            self.ax.axis('off')
            self.ax.text(0.5, 0.5, "未找到该公式", size=12, color="red", ha='center')
            self.canvas.draw()

    def on_combo_select(self, event):
        """下拉框选择逻辑"""
        selected = self.combo.get()
        self.display_math(self.formula_db[selected])

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