import tkinter as tk
from tkinter import ttk

class LengthConverterApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Python 长度单位转换器")
        self.root.geometry("450x350")
        self.root.resizable(False, False)

        # 1. 定义单位到“米”的换算系数
        self.to_meters = {
            "毫米 (mm)": 0.001,
            "厘米 (cm)": 0.01,
            "米 (m)": 1.0,
            "千米 (km)": 1000.0,
            "英寸 (in)": 0.0254,
            "英尺 (ft)": 0.3048,
            "英里 (mi)": 1609.344
        }

        # 2. 顶部标题
        tk.Label(root, text="📏 长度单位转换器", font=("Arial", 18, "bold")).pack(pady=20)

        # 3. 输入区
        input_frame = tk.Frame(root)
        input_frame.pack(pady=10)
        
        self.temp_entry = tk.Entry(input_frame, font=("Arial", 14), width=12, justify="center")
        self.temp_entry.pack(side="left", padx=5)
        
        self.from_unit = ttk.Combobox(input_frame, values=list(self.to_meters.keys()), font=("Arial", 12), width=12, state="readonly")
        self.from_unit.current(2)  # 默认选中“米”
        self.from_unit.pack(side="left", padx=5)

        # 4. 转换按钮
        tk.Button(root, text="🔄 开始转换", font=("Arial", 12), command=self.convert_length).pack(pady=10)

        # 5. 结果展示区
        self.result_label = tk.Label(root, text="", font=("Arial", 14), fg="#333333")
        self.result_label.pack(pady=20)

        # 绑定回车键
        self.root.bind("<Return>", lambda event: self.convert_length())

    def convert_length(self):
        """处理长度转换逻辑"""
        user_input = self.temp_entry.get().strip()
        
        # 1. 输入验证
        if not user_input:
            self.result_label.config(text="⚠️ 请先输入长度值！", fg="orange")
            return
            
        try:
            value = float(user_input)
        except ValueError:
            self.result_label.config(text="❌ 请输入有效的数字！", fg="red")
            return

        # 2. 核心转换逻辑：先转成米，再转成目标单位
        from_factor = self.to_meters[self.from_unit.get()]
        value_in_meters = value * from_factor

        # 3. 生成所有单位的转换结果
        result_lines = []
        for unit, factor in self.to_meters.items():
            converted_value = value_in_meters / factor
            # 保留最多6位小数，并去除末尾多余的0
            formatted_value = f"{converted_value:.6f}".rstrip('0').rstrip('.')
            result_lines.append(f"{unit}: {formatted_value}")

        # 4. 更新界面
        result_text = "\n".join(result_lines)
        self.result_label.config(text=result_text, fg="green")

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