import tkinter as tk
from tkinter import messagebox

# ====== 长度转换逻辑 ======
def convert_length():
    try:
        value = float(entry_value.get())
        from_unit = from_var.get()
        to_unit = to_var.get()

        # 先统一转换为米
        to_meter = {
            "千米": 1000,
            "米": 1,
            "厘米": 0.01,
            "毫米": 0.001,
            "英里": 1609.34,
            "英尺": 0.3048,
            "英寸": 0.0254
        }

        meters = value * to_meter[from_unit]
        result = meters / to_meter[to_unit]

        label_result.config(
            text=f"{value} {from_unit}\n= {result:.4f} {to_unit}"
        )

    except ValueError:
        messagebox.showerror("输入错误", "请输入正确的数字哦 🥺")

# ====== 创建窗口 ======
root = tk.Tk()
root.title("📏 卡通长度转换器")
root.geometry("420x500")
root.resizable(False, False)
root.configure(bg="#E3F2FD")

# ====== 标题 ======
label_title = tk.Label(
    root,
    text="🎀 长度单位转换器 📏",
    font=("Comic Sans MS", 22, "bold"),
    bg="#E3F2FD",
    fg="#1565C0"
)
label_title.pack(pady=15)

# ====== 输入区域 ======
frame_input = tk.Frame(root, bg="#E3F2FD")
frame_input.pack(pady=10)

label_prompt = tk.Label(
    frame_input,
    text="请输入长度数值：",
    font=("Comic Sans MS", 13),
    bg="#E3F2FD"
)
label_prompt.pack(anchor="w")

entry_value = tk.Entry(
    frame_input,
    font=("Comic Sans MS", 16),
    width=20,
    justify="center",
    relief="solid",
    bd=2
)
entry_value.pack(pady=5)

# ====== 单位选择 ======
units = ["千米", "米", "厘米", "毫米", "英里", "英尺", "英寸"]

frame_from = tk.LabelFrame(
    root, text="从（原单位）",
    font=("Comic Sans MS", 12),
    bg="#E3F2FD", fg="#0D47A1"
)
frame_from.pack(pady=10)

from_var = tk.StringVar(value="米")
for u in units:
    tk.Radiobutton(
        frame_from, text=u,
        variable=from_var, value=u,
        font=("Comic Sans MS", 11),
        bg="#E3F2FD"
    ).pack(side="left", padx=5)

frame_to = tk.LabelFrame(
    root, text="转换为（目标单位）",
    font=("Comic Sans MS", 12),
    bg="#E3F2FD", fg="#0D47A1"
)
frame_to.pack(pady=10)

to_var = tk.StringVar(value="千米")
for u in units:
    tk.Radiobutton(
        frame_to, text=u,
        variable=to_var, value=u,
        font=("Comic Sans MS", 11),
        bg="#E3F2FD"
    ).pack(side="left", padx=5)

# ====== 转换按钮 ======
button_convert = tk.Button(
    root,
    text="✨ 开始转换 ✨",
    font=("Comic Sans MS", 14, "bold"),
    bg="#42A5F5",
    fg="white",
    activebackground="#1E88E5",
    relief="flat",
    padx=20, pady=5,
    command=convert_length
)
button_convert.pack(pady=15)

# ====== 结果展示 ======
label_result = tk.Label(
    root,
    text="",
    font=("Comic Sans MS", 14),
    bg="#E3F2FD",
    fg="#0D47A1",
    justify="center"
)
label_result.pack(pady=10)

# ====== 底部提示 ======
label_footer = tk.Label(
    root,
    text="☁️ 支持千米 / 米 / 厘米 / 毫米 / 英里 / 英尺 / 英寸",
    font=("Comic Sans MS", 10),
    bg="#E3F2FD",
    fg="#64B5F6"
)
label_footer.pack(side="bottom", pady=10)

# ====== 运行主循环 ======
root.mainloop()