import tkinter as tk
from tkinter import ttk

class TemperatureConverter:
    def __init__(self, root):
        self.root = root
        self.root.title("027. 温度单位转换器")
        self.root.geometry("500x450")
        self.root.resizable(False, False)

        self.build_ui()

    def build_ui(self):
        # 标题
        tk.Label(
            self.root, text="🌡️ 温度单位转换器",
            font=("微软雅黑", 18, "bold")
        ).pack(pady=15)

        # ===== 输入区 =====
        input_frame = tk.LabelFrame(self.root, text="输入温度", font=("微软雅黑", 10))
        input_frame.pack(pady=10, padx=30, fill=tk.X)

        tk.Label(input_frame, text="温度值：").grid(row=0, column=0, padx=5, pady=10, sticky="e")
        self.temp_entry = tk.Entry(input_frame, width=15, font=("Consolas", 12))
        self.temp_entry.grid(row=0, column=1, padx=5, pady=10)
        self.temp_entry.insert(0, "25")

        tk.Label(input_frame, text="原始单位：").grid(row=0, column=2, padx=5, pady=10, sticky="e")
        self.from_unit = ttk.Combobox(input_frame, values=["℃", "℉", "K"], width=6, state="readonly")
        self.from_unit.grid(row=0, column=3, padx=5, pady=10)
        self.from_unit.set("℃")

        self.temp_entry.bind("<KeyRelease>", lambda e: self.convert())
        self.from_unit.bind("<<ComboboxSelected>>", lambda e: self.convert())

        # ===== 结果区 =====
        result_frame = tk.LabelFrame(self.root, text="转换结果", font=("微软雅黑", 10))
        result_frame.pack(pady=15, padx=30, fill=tk.X)

        # 摄氏度
        self.c_label = tk.Label(result_frame, text="", font=("Consolas", 14), fg="#1565C0")
        self.c_label.pack(anchor="w", padx=15, pady=5)

        # 华氏度
        self.f_label = tk.Label(result_frame, text="", font=("Consolas", 14), fg="#C62828")
        self.f_label.pack(anchor="w", padx=15, pady=5)

        # 开尔文
        self.k_label = tk.Label(result_frame, text="", font=("Consolas", 14), fg="#2E7D32")
        self.k_label.pack(anchor="w", padx=15, pady=5)

        # ===== 公式说明 =====
        formula_frame = tk.LabelFrame(self.root, text="转换公式", font=("微软雅黑", 10))
        formula_frame.pack(pady=10, padx=30, fill=tk.X)

        formulas = [
            "℉ = ℃ × 9/5 + 32",
            "℃ = (℉ - 32) × 5/9",
            "K  = ℃ + 273.15"
        ]

        for f in formulas:
            tk.Label(formula_frame, text=f, font=("Consolas", 10), fg="#555").pack(anchor="w", padx=15, pady=2)

        # ===== 按钮区 =====
        btn_frame = tk.Frame(self.root)
        btn_frame.pack(pady=10)

        tk.Button(
            btn_frame, text="清空",
            width=12, bg="#FF9800", fg="white",
            font=("微软雅黑", 10),
            command=self.clear
        ).pack(side=tk.LEFT, padx=10)

        tk.Button(
            btn_frame, text="退出",
            width=12, bg="#f44336", fg="white",
            font=("微软雅黑", 10),
            command=self.root.quit
        ).pack(side=tk.LEFT, padx=10)

        # 初始转换
        self.convert()

    def convert(self):
        try:
            value = float(self.temp_entry.get().strip())
        except ValueError:
            self.c_label.config(text="摄氏度：--")
            self.f_label.config(text="华氏度：--")
            self.k_label.config(text="开尔文：--")
            return

        unit = self.from_unit.get()

        # 统一先转为摄氏度
        if unit == "℃":
            celsius = value
        elif unit == "℉":
            celsius = (value - 32) * 5 / 9
        else:  # K
            celsius = value - 273.15

        # 从摄氏度转为其他单位
        fahrenheit = celsius * 9 / 5 + 32
        kelvin = celsius + 273.15

        # 显示结果（保留2位小数）
        self.c_label.config(text=f"摄氏度：{celsius:.2f} ℃")
        self.f_label.config(text=f"华氏度：{fahrenheit:.2f} ℉")
        self.k_label.config(text=f"开尔文：{kelvin:.2f} K")

    def clear(self):
        self.temp_entry.delete(0, tk.END)
        self.temp_entry.insert(0, "0")
        self.convert()


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