import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.title("配色练习工具 - Tkinter")
root.geometry("550x420")

# 存储RGB
r_var = tk.IntVar(value=128)
g_var = tk.IntVar(value=128)
b_var = tk.IntVar(value=128)
saved_colors = []

# 颜色预览面板
preview = tk.Label(root, bg="#808080", width=30, height=10)
preview.pack(pady=10)

# 更新预览颜色
def update_color(val=None):
    r = r_var.get()
    g = g_var.get()
    b = b_var.get()
    hex_str = f"#{r:02X}{g:02X}{b:02X}"
    preview.config(bg=hex_str)
    rgb_label.config(text=f"RGB: ({r}, {g}, {b}) | HEX: {hex_str}")

# RGB滑块区域
frame_slider = ttk.Frame(root)
frame_slider.pack(pady=5, fill="x", padx=20)

ttk.Label(frame_slider, text="R").grid(row=0, column=0, sticky="w")
s_r = ttk.Scale(frame_slider, from_=0, to=255, variable=r_var, command=update_color, orient="horizontal")
s_r.grid(row=0, column=1, padx=10, sticky="ew")

ttk.Label(frame_slider, text="G").grid(row=1, column=0, sticky="w")
s_g = ttk.Scale(frame_slider, from_=0, to=255, variable=g_var, command=update_color, orient="horizontal")
s_g.grid(row=1, column=1, padx=10, sticky="ew")

ttk.Label(frame_slider, text="B").grid(row=2, column=0, sticky="w")
s_b = ttk.Scale(frame_slider, from_=0, to=255, variable=b_var, command=update_color, orient="horizontal")
s_b.grid(row=2, column=1, padx=10, sticky="ew")
frame_slider.columnconfigure(1, weight=1)

# RGB文字显示
rgb_label = ttk.Label(root, text="RGB: (128, 128, 128)")
rgb_label.pack()

# 按钮功能区
frame_btn = ttk.Frame(root)
frame_btn.pack(pady=10)

def save_color():
    r = r_var.get()
    g = g_var.get()
    b = b_var.get()
    saved_colors.append((r,g,b))
    refresh_saved()

def random_color():
    import random
    r_var.set(random.randint(0,255))
    g_var.set(random.randint(0,255))
    b_var.set(random.randint(0,255))
    update_color()

def clear_all():
    saved_colors.clear()
    refresh_saved()

ttk.Button(frame_btn, text="保存配色", command=save_color).grid(row=0, column=0, padx=5)
ttk.Button(frame_btn, text="随机配色", command=random_color).grid(row=0, column=1, padx=5)
ttk.Button(frame_btn, text="清空记录", command=clear_all).grid(row=0, column=2, padx=5)

# 保存配色展示区
frame_saved = ttk.Frame(root)
frame_saved.pack(pady=10, fill="x", padx=20)
ttk.Label(frame_saved, text="已保存配色：").pack(anchor="w")
color_canvas = tk.Canvas(frame_saved, height=50)
color_canvas.pack(fill="x")

def refresh_saved():
    color_canvas.delete("all")
    x = 10
    for (r,g,b) in saved_colors:
        hex_c = f"#{r:02X}{g:02X}{b:02X}"
        color_canvas.create_rectangle(x, 10, x+40, 40, fill=hex_c, outline="black")
        x += 50

update_color()
root.mainloop()