import tkinter as tk
from tkinter import ttk, messagebox

# 固定汇率表（以 1 美元为基准）
RATES = {
    "USD": 1.0,
    "EUR": 0.85,
    "GBP": 0.73,
    "JPY": 110.5,
    "CNY": 6.45,
    "KRW": 1180.0,
    "INR": 74.5,
    "AUD": 1.35,
    "CAD": 1.25,
    "CHF": 0.92,
}

class CurrencyConverter:
    def __init__(self, root):
        self.root = root
        self.root.title("货币单位转换器")
        self.root.geometry("400x300")
        self.root.resizable(False, False)

        # 货币列表
        self.currencies = list(RATES.keys())

        # 变量
        self.from_currency = tk.StringVar(value="USD")
        self.to_currency = tk.StringVar(value="EUR")
        self.amount = tk.StringVar()
        self.result = tk.StringVar()

        # 创建界面组件
        self.create_widgets()

    def create_widgets(self):
        # 主框架
        main_frame = ttk.Frame(self.root, padding="10")
        main_frame.pack(fill=tk.BOTH, expand=True)

        # 源货币
        ttk.Label(main_frame, text="源货币:").grid(row=0, column=0, sticky=tk.W, pady=5)
        from_combo = ttk.Combobox(main_frame, textvariable=self.from_currency,
                                  values=self.currencies, state="readonly")
        from_combo.grid(row=0, column=1, sticky=tk.W, pady=5)

        # 目标货币
        ttk.Label(main_frame, text="目标货币:").grid(row=1, column=0, sticky=tk.W, pady=5)
        to_combo = ttk.Combobox(main_frame, textvariable=self.to_currency,
                                values=self.currencies, state="readonly")
        to_combo.grid(row=1, column=1, sticky=tk.W, pady=5)

        # 金额输入
        ttk.Label(main_frame, text="金额:").grid(row=2, column=0, sticky=tk.W, pady=5)
        amount_entry = ttk.Entry(main_frame, textvariable=self.amount, width=20)
        amount_entry.grid(row=2, column=1, sticky=tk.W, pady=5)
        amount_entry.focus_set()

        # 转换按钮
        convert_btn = ttk.Button(main_frame, text="转换", command=self.convert)
        convert_btn.grid(row=3, column=0, columnspan=2, pady=10)

        # 交换货币按钮
        swap_btn = ttk.Button(main_frame, text="交换货币", command=self.swap_currencies)
        swap_btn.grid(row=4, column=0, columnspan=2, pady=5)

        # 结果显示
        ttk.Label(main_frame, text="转换结果:").grid(row=5, column=0, sticky=tk.W, pady=5)
        result_entry = ttk.Entry(main_frame, textvariable=self.result, state="readonly", width=20)
        result_entry.grid(row=5, column=1, sticky=tk.W, pady=5)

        # 清空按钮
        clear_btn = ttk.Button(main_frame, text="清空", command=self.clear_all)
        clear_btn.grid(row=6, column=0, columnspan=2, pady=5)

    def convert(self):
        """执行货币转换"""
        try:
            amount = float(self.amount.get())
            if amount < 0:
                messagebox.showerror("错误", "金额不能为负数")
                return
        except ValueError:
            messagebox.showerror("错误", "请输入有效的数字")
            return

        from_cur = self.from_currency.get()
        to_cur = self.to_currency.get()

        # 以美元为中间货币进行转换
        try:
            usd_amount = amount / RATES[from_cur]
            converted = usd_amount * RATES[to_cur]
            self.result.set(f"{converted:.4f} {to_cur}")
        except KeyError:
            messagebox.showerror("错误", "不支持的货币类型")
        except ZeroDivisionError:
            messagebox.showerror("错误", "汇率错误")

    def swap_currencies(self):
        """交换源货币和目标货币"""
        from_cur = self.from_currency.get()
        to_cur = self.to_currency.get()
        self.from_currency.set(to_cur)
        self.to_currency.set(from_cur)
        # 自动重新转换（如果有金额）
        if self.amount.get():
            self.convert()

    def clear_all(self):
        """清空所有输入和结果"""
        self.amount.set("")
        self.result.set("")
        self.from_currency.set("USD")
        self.to_currency.set("EUR")

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