import tkinter as tk
from tkinter import ttk, messagebox

class CurrencyConverterApp:
    def __init__(self, root):
        self.root = root
        self.root.title("💱 货币单位转换器")
        self.root.geometry("400x300")
        self.root.resizable(False, False)
        
        # 模拟汇率字典 (基准: 1 CNY)
        # 实际项目中可替换为 API 实时获取
        self.exchange_rates = {
            "CNY (人民币)": 1.0,
            "USD (美元)": 0.14,
            "EUR (欧元)": 0.13,
            "GBP (英镑)": 0.11,
            "JPY (日元)": 20.50,
            "HKD (港币)": 1.08
        }
        
        self.setup_ui()

    def setup_ui(self):
        # 主框架，增加一点内边距让界面不那么拥挤
        main_frame = ttk.Frame(self.root, padding="20")
        main_frame.pack(expand=True, fill="both")

        # --- 金额输入区 ---
        ttk.Label(main_frame, text="请输入金额:").grid(row=0, column=0, sticky="w", pady=5)
        self.amount_entry = ttk.Entry(main_frame, font=("Arial", 14))
        self.amount_entry.grid(row=1, column=0, columnspan=3, sticky="ew", pady=5, padx=5)

        # --- 货币选择区 ---
        ttk.Label(main_frame, text="从:").grid(row=2, column=0, sticky="w", pady=10)
        self.from_currency = ttk.Combobox(main_frame, values=list(self.exchange_rates.keys()), state="readonly", width=15)
        self.from_currency.grid(row=2, column=1, padx=5)
        self.from_currency.current(0) # 默认选中第一个

        ttk.Label(main_frame, text="到:").grid(row=3, column=0, sticky="w", pady=10)
        self.to_currency = ttk.Combobox(main_frame, values=list(self.exchange_rates.keys()), state="readonly", width=15)
        self.to_currency.grid(row=3, column=1, padx=5)
        self.to_currency.current(1) # 默认选中第二个

        # --- 按钮区 ---
        btn_frame = ttk.Frame(main_frame)
        btn_frame.grid(row=4, column=0, columnspan=3, pady=20)
        
        convert_btn = ttk.Button(btn_frame, text="🔄 转换", command=self.convert, width=15)
        convert_btn.pack(side="left", padx=10)
        
        clear_btn = ttk.Button(btn_frame, text="🗑️ 清空", command=self.clear, width=15)
        clear_btn.pack(side="left", padx=10)

        # --- 结果显示区 ---
        self.result_label = ttk.Label(main_frame, text="转换结果将显示在这里", font=("Arial", 12, "bold"), foreground="blue")
        self.result_label.grid(row=5, column=0, columnspan=3, pady=10)

    def convert(self):
        amount_str = self.amount_entry.get().strip()
        
        # 1. 校验输入是否为有效数字
        try:
            amount = float(amount_str)
        except ValueError:
            messagebox.showwarning("输入错误", "请输入有效的数字金额！")
            return

        # 2. 获取选中的货币
        from_cur = self.from_currency.get()
        to_cur = self.to_currency.get()

        # 3. 计算汇率并转换
        # 公式: 目标金额 = 输入金额 * (目标汇率 / 源汇率)
        rate = self.exchange_rates[to_cur] / self.exchange_rates[from_cur]
        result = amount * rate

        # 4. 格式化输出 (保留两位小数)
        self.result_label.config(text=f"{amount:,.2f} {from_cur[:3]} = {result:,.2f} {to_cur[:3]}")

    def clear(self):
        self.amount_entry.delete(0, tk.END)
        self.result_label.config(text="转换结果将显示在这里", foreground="blue")
        self.amount_entry.focus_set()

if __name__ == "__main__":
    root = tk.Tk()
    # 尝试使用系统默认的现代主题，如果失败则用默认
    style = ttk.Style()
    available_themes = style.theme_names()
    if 'clam' in available_themes:
        style.theme_use('clam')
        
    app = CurrencyConverterApp(root)
    root.mainloop()