import tkinter as tk
from tkinter import ttk
from tkinter import font

# 单位换算规则
unit_rate = {
    "km(千米)": 1000,
    "m(米)": 1,
    "cm(厘米)": 0.01,
    "mm(毫米)": 0.001,
    "mile(英里)": 1609.34,
    "yard(码)": 0.9144,
    "ft(英尺)": 0.3048,
    "inch(英寸)": 0.0254
}
unit_list = list(unit_rate.keys())

# 全部滤镜配色（6套：清新白、暗夜黑、樱花粉、薄荷绿、暖橘橙、星空蓝）
theme_data = {
    "清新白": {
        "window_bg": "#f0f4f8",
        "panel_bg": "#ffffff",
        "text_color": "#222222",
        "btn1": "#3488eb",
        "btn2": "#708090",
        "input_bg": "#fff"
    },
    "暗夜黑": {
        "window_bg": "#121212",
        "panel_bg": "#1e1e1e",
        "text_color": "#f1f1f1",
        "btn1": "#00adb5",
        "btn2": "#444444",
        "input_bg": "#2d2d2d"
    },
    "樱花粉": {
        "window_bg": "#ffeef6",
        "panel_bg": "#fff3f9",
        "text_color": "#662040",
        "btn1": "#e84393",
        "btn2": "#c888a3",
        "input_bg": "#ffffff"
    },
    "薄荷绿": {
        "window_bg": "#e6f9ef",
        "panel_bg": "#d2f7e3",
        "text_color": "#0f5132",
        "btn1": "#28b463",
        "btn2": "#74b794",
        "input_bg": "#ffffff"
    },
    "暖橘橙": {
        "window_bg": "#fff2e6",
        "panel_bg": "#ffe8d6",
        "text_color": "#8c3310",
        "btn1": "#f37021",
        "btn2": "#d6976c",
        "input_bg": "#ffffff"
    },
    "星空蓝": {
        "window_bg": "#0a192f",
        "panel_bg": "#112240",
        "text_color": "#ccd6f6",
        "btn1": "#64ffda",
        "btn2": "#233554",
        "input_bg": "#172a45"
    }
}
now_theme = "清新白"

# 切换滤镜主题函数
def change_theme(name):
    global now_theme
    now_theme = name
    color = theme_data[name]
    root.config(bg=color["window_bg"])
    main_panel.config(bg=color["panel_bg"])
    theme_box.config(bg=color["panel_bg"])

    title.config(bg=color["panel_bg"], fg=color["text_color"])
    lab_num.config(bg=color["panel_bg"], fg=color["text_color"])
    lab_from.config(bg=color["panel_bg"], fg=color["text_color"])
    lab_to.config(bg=color["panel_bg"], fg=color["text_color"])
    lab_res.config(bg=color["panel_bg"], fg=color["text_color"])
    res_text.config(bg=color["panel_bg"], fg=color["text_color"])
    lab_tip.config(bg=color["panel_bg"], fg=color["text_color"])

    entry.config(bg=color["input_bg"], fg=color["text_color"])
    btn_trans.config(bg=color["btn1"], fg="white", activebackground=color["btn1"])
    btn_clear.config(bg=color["btn2"], fg="white", activebackground=color["btn2"])

# 单位转换计算函数
def trans():
    try:
        num = float(entry.get())
        u_from = combo1.get()
        u_to = combo2.get()
        meter = num * unit_rate[u_from]
        ans = meter / unit_rate[u_to]
        u1 = u_from.split("(")[0]
        u2 = u_to.split("(")[0]
        res_text.config(text=f"{num} {u1} = {ans:.6f} {u2}")
    except ValueError:
        res_text.config(text="⚠️ 请输入合法数字！")

# 清空输入和结果
def clear():
    entry.delete(0, tk.END)
    res_text.config(text="转换结果将展示在这里")

# 创建主窗口
root = tk.Tk()
root.title("多滤镜长度单位转换器")
root.geometry("530x410")
root.resizable(False, False)

# 字体样式定义
font_title = font.Font(family="微软雅黑", size=20, weight="bold")
font_text = font.Font(family="微软雅黑", size=11)
font_btn = font.Font(family="微软雅黑", size=10, weight="bold")

# 主容器面板
main_panel = tk.Frame(root, bd=3, relief=tk.GROOVE)
main_panel.pack(padx=22, pady=22, fill=tk.BOTH)

# 标题
title = tk.Label(main_panel, text="📏 长度单位转换器", font=font_title)
title.pack(pady=14)

# 数值输入区域
lab_num = tk.Label(main_panel, text="输入数值：", font=font_text)
lab_num.pack(anchor="w", padx=32)
entry = tk.Entry(main_panel, font=font_text, width=32)
entry.pack(pady=5, padx=32)

# 原始单位选择框
lab_from = tk.Label(main_panel, text="原单位：", font=font_text)
lab_from.pack(anchor="w", padx=32, pady=(9,0))
combo1 = ttk.Combobox(main_panel, values=unit_list, font=font_text, width=30)
combo1.current(1)
combo1.pack(pady=4, padx=32)

# 目标单位选择框
lab_to = tk.Label(main_panel, text="目标单位：", font=font_text)
lab_to.pack(anchor="w", padx=32, pady=(9,0))
combo2 = ttk.Combobox(main_panel, values=unit_list, font=font_text, width=30)
combo2.current(2)
combo2.pack(pady=4, padx=32)

# 转换、清空按钮行
btn_frame = tk.Frame(main_panel)
btn_frame.pack(pady=12)
btn_trans = tk.Button(btn_frame, text="一键转换", font=font_btn, width=13, command=trans)
btn_trans.grid(row=0, column=0, padx=12)
btn_clear = tk.Button(btn_frame, text="清空", font=font_btn, width=13, command=clear)
btn_clear.grid(row=0, column=1, padx=12)

# 结果展示区域
lab_res = tk.Label(main_panel, text="转换结果：", font=font_text)
lab_res.pack(anchor="w", padx=32)
res_text = tk.Label(main_panel, text="转换结果将展示在这里", font=font_text)
res_text.pack(pady=8)

# 滤镜切换区域
theme_box = tk.Frame(main_panel)
theme_box.pack(pady=15)
lab_tip = tk.Label(theme_box, text="切换滤镜主题：", font=font_text)
lab_tip.grid(row=0, column=0, padx=6)
theme_select = ttk.Combobox(theme_box, values=list(theme_data.keys()), font=font_text, width=13)
theme_select.current(0)
theme_select.grid(row=0, column=1)

# 下拉框绑定切换主题事件
def select_theme(event):
    t = theme_select.get()
    change_theme(t)
theme_select.bind("<<ComboboxSelected>>", select_theme)

# 初始化默认滤镜
change_theme(now_theme)

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