import tkinter as tk
from tkinter import ttk, messagebox

class TemperatureConverter:
    def __init__(self, root):
        # 主窗口设置
        self.root = root
        self.root.title("温度单位转换器")
        self.root.geometry("600x400")  # 窗口大小
        self.root.resizable(False, False)  # 禁止调整窗口大小

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

    def create_widgets(self):
        # 1. 输入框区域
        input_frame = ttk.Frame(self.root, padding="10")
        input_frame.pack(fill=tk.X, padx=20, pady=10)

        ttk.Label(input_frame, text="输入温度值:").grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)
        self.temp_entry = ttk.Entry(input_frame, width=20)
        self.temp_entry.grid(row=0, column=1, padx=5, pady=5)

        # 2. 单位选择区域
        unit_frame = ttk.Frame(self.root, padding="10")
        unit_frame.pack(fill=tk.X, padx=20, pady=5)

        ttk.Label(unit_frame, text="原始单位:").grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)
        self.from_unit = ttk.Combobox(unit_frame, values=["摄氏度(°C)", "华氏度(°F)", "开尔文(K)"], width=15)
        self.from_unit.current(0)  # 默认选中摄氏度
        self.from_unit.grid(row=0, column=1, padx=5, pady=5)

        ttk.Label(unit_frame, text="目标单位:").grid(row=0, column=2, padx=5, pady=5, sticky=tk.W)
        self.to_unit = ttk.Combobox(unit_frame, values=["摄氏度(°C)", "华氏度(°F)", "开尔文(K)"], width=15)
        self.to_unit.current(1)  # 默认选中华氏度
        self.to_unit.grid(row=0, column=3, padx=5, pady=5)

        # 3. 转换按钮
        btn_frame = ttk.Frame(self.root, padding="10")
        btn_frame.pack(fill=tk.X, padx=20, pady=10)

        convert_btn = ttk.Button(btn_frame, text="转换", command=self.convert_temperature)
        convert_btn.grid(row=0, column=0, padx=5, pady=5)

        clear_btn = ttk.Button(btn_frame, text="清空", command=self.clear_input)
        clear_btn.grid(row=0, column=1, padx=5, pady=5)

        # 4. 结果显示区域
        result_frame = ttk.Frame(self.root, padding="10")
        result_frame.pack(fill=tk.X, padx=20, pady=5)

        ttk.Label(result_frame, text="转换结果:").grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)
        self.result_label = ttk.Label(result_frame, text="", foreground="blue", font=("Arial", 10, "bold"))
        self.result_label.grid(row=0, column=1, padx=5, pady=5, sticky=tk.W)

    def convert_temperature(self):
        """核心转换逻辑"""
        try:
            # 获取输入值和单位
            temp_value = float(self.temp_entry.get())
            from_unit = self.from_unit.get()
            to_unit = self.to_unit.get()

            # 第一步：先将所有单位转换为摄氏度（中间基准）
            if from_unit == "摄氏度(°C)":
                c_temp = temp_value
            elif from_unit == "华氏度(°F)":
                c_temp = (temp_value - 32) * 5 / 9  # 华氏转摄氏
            elif from_unit == "开尔文(K)":
                c_temp = temp_value - 273.15  # 开尔文转摄氏
            else:
                messagebox.showerror("错误", "请选择有效的原始单位")
                return

            # 第二步：将摄氏度转换为目标单位
            if to_unit == "摄氏度(°C)":
                result = c_temp
            elif to_unit == "华氏度(°F)":
                result = c_temp * 9 / 5 + 32  # 摄氏转华氏
            elif to_unit == "开尔文(K)":
                result = c_temp + 273.15  # 摄氏转开尔文
            else:
                messagebox.showerror("错误", "请选择有效的目标单位")
                return

            # 显示结果（保留2位小数）
            self.result_label.config(text=f"{temp_value} {from_unit} = {result:.2f} {to_unit}")

        except ValueError:
            # 输入非数字的异常处理
            messagebox.showerror("输入错误", "请输入有效的数字（如 25、36.5）")
            self.temp_entry.focus()
        except Exception as e:
            # 其他未知异常
            messagebox.showerror("错误", f"转换失败：{str(e)}")

    def clear_input(self):
        """清空输入和结果"""
        self.temp_entry.delete(0, tk.END)
        self.result_label.config(text="")
        self.from_unit.current(0)
        self.to_unit.current(1)

# 程序入口
if __name__ == "__main__":
    root = tk.Tk()
    app = TemperatureConverter(root)
    root.mainloop()