import tkinter as tk
from tkinter import ttk, messagebox

class MultiCalculator:
    def __init__(self, root):
        self.root = root
        self.root.title("全能助手 (计算/单位/亲戚)")
        self.root.geometry("400x500")

        # 创建标签页控件
        tab_control = ttk.Notebook(root)
        
        self.tab1 = ttk.Frame(tab_control)
        self.tab2 = ttk.Frame(tab_control)
        self.tab3 = ttk.Frame(tab_control)

        tab_control.add(self.tab1, text='标准计算器')
        tab_control.add(self.tab2, text='单位转换')
        tab_control.add(self.tab3, text='亲戚称呼')
        tab_control.pack(expand=1, fill="both")

        self.setup_calculator()
        self.setup_unit_converter()
        self.setup_kinship_converter()

    # --- 1. 标准计算器部分 ---
    def setup_calculator(self):
        self.calc_display = tk.Entry(self.tab1, font=("Arial", 20), justify='right')
        self.calc_display.grid(row=0, column=0, columnspan=4, sticky="nsew", padx=5, pady=5)
        
        buttons = [
            '7', '8', '9', '/',
            '4', '5', '6', '*',
            '1', '2', '3', '-',
            'C', '0', '=', '+'
        ]
        
        r, c = 1, 0
        for btn in buttons:
            tk.Button(self.tab1, text=btn, width=5, height=2, font=("Arial", 12),
                      command=lambda x=btn: self.on_calc_click(x)).grid(row=r, column=c, padx=2, pady=2, sticky="nsew")
            c += 1
            if c > 3: c = 0; r += 1

    def on_calc_click(self, char):
        if char == '=':
            try:
                res = eval(self.calc_display.get())
                self.calc_display.delete(0, tk.END)
                self.calc_display.insert(tk.END, str(res))
            except:
                messagebox.showerror("错误", "表达式非法")
        elif char == 'C':
            self.calc_display.delete(0, tk.END)
        else:
            self.calc_display.insert(tk.END, char)

    # --- 2. 单位转换部分 (以长度为例) ---
    def setup_unit_converter(self):
        ttk.Label(self.tab2, text="输入数值:").pack(pady=5)
        self.unit_input = ttk.Entry(self.tab2)
        self.unit_input.pack(pady=5)

        self.unit_type = ttk.Combobox(self.tab2, values=["厘米 -> 英寸", "英寸 -> 厘米", "公斤 -> 斤", "斤 -> 公斤"])
        self.unit_type.current(0)
        self.unit_type.pack(pady=5)

        ttk.Button(self.tab2, text="转换", command=self.convert_unit).pack(pady=10)
        self.unit_result = ttk.Label(self.tab2, text="结果: ", font=("Arial", 12))
        self.unit_result.pack(pady=10)

    def convert_unit(self):
        try:
            val = float(self.unit_input.get())
            utype = self.unit_type.get()
            if utype == "厘米 -> 英寸": res = val / 2.54
            elif utype == "英寸 -> 厘米": res = val * 2.54
            elif utype == "公斤 -> 斤": res = val * 2
            elif utype == "斤 -> 公斤": res = val / 2
            self.unit_result.config(text=f"结果: {round(res, 2)}")
        except:
            messagebox.showerror("错误", "请输入有效数字")

    # --- 3. 亲戚称呼转换 (简化逻辑版) ---
    def setup_kinship_converter(self):
        ttk.Label(self.tab3, text="我的关系链 (用'的'隔开):").pack(pady=5)
        ttk.Label(self.tab3, text="例如: 爸爸的妈妈", foreground="gray").pack()
        self.kin_input = ttk.Entry(self.tab3)
        self.kin_input.pack(pady=5)

        ttk.Button(self.tab3, text="查询称呼", command=self.convert_kinship).pack(pady=10)
        self.kin_result = ttk.Label(self.tab3, text="你应该叫他/她: ", font=("Arial", 12))
        self.kin_result.pack(pady=10)

        # 简单的关系映射表
        self.kin_dict = {
            "爸爸的爸爸": "爷爷", "爸爸的妈妈": "奶奶", "爸爸的哥哥": "伯父", "爸爸的弟弟": "叔叔",
            "爸爸的姐妹": "姑姑", "妈妈的爸爸": "外公", "妈妈的妈妈": "外婆", "妈妈的兄弟": "舅舅",
            "妈妈的姐妹": "姨妈", "老婆的爸爸": "岳父", "老婆的妈妈": "岳母"
        }

    def convert_kinship(self):
        rel = self.kin_input.get().strip()
        res = self.kin_dict.get(rel, "哎呀，这个关系太复杂了，我还在学习中！\n(请尝试：爸爸的妈妈)")
        self.kin_result.config(text=f"你应该叫他/她: {res}")

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