import tkinter as tk
from tkinter import ttk

# 长度单位换算基准：全部统一换算成米
unit_to_meter = {
    "千米(km)": 1000,
    "米(m)": 1,
    "分米(dm)": 0.1,
    "厘米(cm)": 0.01,
    "毫米(mm)": 0.001,
    "英里(mi)": 1609.344,
    "码(yd)": 0.9144,
    "英尺(ft)": 0.3048,
    "英寸(in)": 0.0254
}
unit_list = list(unit_to_meter.keys())

def convert_length():
    """执行单位换算逻辑"""
    try:
        input_num = float(entry_input.get())
        from_unit = combo_from.get()
        to_unit = combo_to.get()
        # 转为米 → 再转为目标单位
        meter_val = input_num * unit_to_meter[from_unit]
        result = meter_val / unit_to_meter[to_unit]
        label_result.config(text=f"换算结果：{result:.6f} {to_unit.split('(')[0]}")
    except ValueError:
        label_result.config(text="请输入有效的数字！")

def clear_all():
    """清空输入框和结果"""
    entry_input.delete(0, tk.END)
    label_result.config(text="换算结果：")

# 主窗口配置
root = tk.Tk()
root.title("长度单位转换器")
root.geometry("500x260")
root.resizable(False, False)
root.configure(bg="#f0f4f8")

# 标题
title_label = tk.Label(root, text="长度单位转换器", font=("微软雅黑", 16, "bold"), bg="#f0f4f8", fg="#2c3e50")
title_label.pack(pady=12)

# 输入区域框架
frame_input = tk.Frame(root, bg="#f0f4f8")
frame_input.pack()
tk.Label(frame_input, text="输入数值：", font=("微软雅黑", 11), bg="#f0f4f8").grid(row=0, column=0, padx=5)
entry_input = tk.Entry(frame_input, font=("微软雅黑", 11), width=18)
entry_input.grid(row=0, column=1, padx=5)

# 单位选择区域
frame_unit = tk.Frame(root, bg="#f0f4f8")
frame_unit.pack(pady=10)
tk.Label(frame_unit, text="原单位：", font=("微软雅黑", 11), bg="#f0f4f8").grid(row=0, column=0, padx=5)
combo_from = ttk.Combobox(frame_unit, values=unit_list, width=12, font=("微软雅黑", 10))
combo_from.current(1)  # 默认选中米
combo_from.grid(row=0, column=1, padx=8)

tk.Label(frame_unit, text="→ 目标单位：", font=("微软雅黑", 11), bg="#f0f4f8").grid(row=0, column=2, padx=5)
combo_to = ttk.Combobox(frame_unit, values=unit_list, width=12, font=("微软雅黑", 10))
combo_to.current(3)  # 默认选中厘米
combo_to.grid(row=0, column=3, padx=5)

# 按钮区域
frame_btn = tk.Frame(root, bg="#f0f4f8")
frame_btn.pack(pady=8)
btn_convert = tk.Button(frame_btn, text="开始转换", command=convert_length,
                        font=("微软雅黑", 10), bg="#3498db", fg="white", width=8)
btn_convert.grid(row=0, column=0, padx=10)
btn_clear = tk.Button(frame_btn, text="清空", command=clear_all,
                      font=("微软雅黑", 10), bg="#e74c3c", fg="white", width=8)
btn_clear.grid(row=0, column=1, padx=10)

# 结果展示
label_result = tk.Label(root, text="换算结果：", font=("微软雅黑", 12), bg="#f0f4f8", fg="#2980b9")
label_result.pack(pady=10)

# 窗口循环运行
root.mainloop()