import tkinter as tk
from tkinter import messagebox

# 单位换算基准：统一换算成米
unit_to_meter = {
    "千米": 1000,
    "米": 1,
    "厘米": 0.01,
    "毫米": 0.001,
    "英寸": 0.0254,
    "英尺": 0.3048,
    "英里": 1609.34
}
unit_list = list(unit_to_meter.keys())

def convert_length():
    """执行长度转换计算"""
    try:
        num = float(entry_num.get())
        from_unit = var_from.get()
        to_unit = var_to.get()
        # 先转成米，再转目标单位
        meter = num * unit_to_meter[from_unit]
        result = meter / unit_to_meter[to_unit]
        var_result.set(f"{num} {from_unit} = {result:.4f} {to_unit}")
    except ValueError:
        messagebox.showerror("输入错误", "请输入有效的数字！")

def clear_all():
    """清空输入和结果"""
    entry_num.delete(0, tk.END)
    var_result.set("转换结果将显示在这里")
    var_from.set(unit_list[0])
    var_to.set(unit_list[1])

# 主窗口
root = tk.Tk()
root.title("长度单位转换器")
root.geometry("480x260")
root.resizable(False, False)

# 标题
tk.Label(root, text="多功能长度单位转换器", font=("微软雅黑", 15, "bold")).pack(pady=15)

# 输入行
frame_input = tk.Frame(root)
frame_input.pack(pady=5)
tk.Label(frame_input, text="输入数值：", font=("微软雅黑", 11)).grid(row=0, column=0, padx=5)
entry_num = tk.Entry(frame_input, width=15, font=("微软雅黑", 12))
entry_num.grid(row=0, column=1)

# 来源单位下拉框
var_from = tk.StringVar(value=unit_list[0])
combo_from = tk.OptionMenu(frame_input, var_from, *unit_list)
combo_from.config(font=("微软雅黑", 10), width=7)
combo_from.grid(row=0, column=2, padx=8)

tk.Label(frame_input, text="→", font=("微软雅黑", 13)).grid(row=0, column=3)

# 目标单位下拉框
var_to = tk.StringVar(value=unit_list[1])
combo_to = tk.OptionMenu(frame_input, var_to, *unit_list)
combo_to.config(font=("微软雅黑", 10), width=7)
combo_to.grid(row=0, column=4, padx=8)

# 结果展示
var_result = tk.StringVar(value="转换结果将显示在这里")
label_result = tk.Label(root, textvariable=var_result, font=("微软雅黑", 12, "bold"), fg="#224488")
label_result.pack(pady=18)

# 按钮区域
frame_btn = tk.Frame(root)
frame_btn.pack()
tk.Button(frame_btn, text="开始转换", command=convert_length,
          font=("微软雅黑", 10), bg="#73c2fb", width=10).grid(row=0, column=0, padx=10)
tk.Button(frame_btn, text="清空重置", command=clear_all,
          font=("微软雅黑", 10), bg="#ffadad", width=10).grid(row=0, column=1, padx=10)

root.mainloop()