import tkinter as tk
from tkinter import ttk, messagebox

class ColorPicker:
    def __init__(self, root):
        self.root = root
        self.root.title("🎨 颜色识别/取色器")
        self.root.geometry("500x400")
        self.root.resizable(False, False)

        # 初始化 RGB 值
        self.r = tk.IntVar(value=255)
        self.g = tk.IntVar(value=255)
        self.b = tk.IntVar(value=0)

        # ========== 顶部：颜色预览面板 ==========
        self.preview_frame = tk.LabelFrame(root, text="颜色实时预览", bg="white")
        self.preview_frame.pack(padx=20, pady=10, fill="x")
        # 颜色展示画布
        self.color_canvas = tk.Canvas(self.preview_frame, height=100, bg="#FFFF00")
        self.color_canvas.pack(padx=10, pady=10, fill="x")

        # ========== 中间：RGB 滑块控制 ==========
        control_frame = tk.LabelFrame(root, text="RGB 颜色调节 (0-255)")
        control_frame.pack(padx=20, pady=5, fill="x")

        # 红色 R 滑块
        ttk.Label(control_frame, text="红色 R:", foreground="red").grid(row=0, column=0, padx=5, pady=8)
        self.r_slider = ttk.Scale(control_frame, from_=0, to=255, variable=self.r, command=self.update_color)
        self.r_slider.grid(row=0, column=1, padx=5, sticky="we")
        self.r_entry = ttk.Entry(control_frame, textvariable=self.r, width=5)
        self.r_entry.grid(row=0, column=2, padx=5)

        # 绿色 G 滑块
        ttk.Label(control_frame, text="绿色 G:", foreground="green").grid(row=1, column=0, padx=5, pady=8)
        self.g_slider = ttk.Scale(control_frame, from_=0, to=255, variable=self.g, command=self.update_color)
        self.g_slider.grid(row=1, column=1, padx=5, sticky="we")
        self.g_entry = ttk.Entry(control_frame, textvariable=self.g, width=5)
        self.g_entry.grid(row=1, column=2, padx=5)

        # 蓝色 B 滑块
        ttk.Label(control_frame, text="蓝色 B:", foreground="blue").grid(row=2, column=0, padx=5, pady=8)
        self.b_slider = ttk.Scale(control_frame, from_=0, to=255, variable=self.b, command=self.update_color)
        self.b_slider.grid(row=2, column=1, padx=5, sticky="we")
        self.b_entry = ttk.Entry(control_frame, textvariable=self.b, width=5)
        self.b_entry.grid(row=2, column=2, padx=5)

        # 让滑块自适应宽度
        control_frame.grid_columnconfigure(1, weight=1)

        # ========== 底部：色值显示 + 功能按钮 ==========
        info_frame = tk.Frame(root)
        info_frame.pack(padx=20, pady=10, fill="x")

        # 色值标签
        self.hex_label = ttk.Label(info_frame, text="十六进制: #FFFF00", font=("微软雅黑", 12))
        self.hex_label.grid(row=0, column=0, padx=5)

        self.rgb_label = ttk.Label(info_frame, text="RGB: (255, 255, 0)", font=("微软雅黑", 12))
        self.rgb_label.grid(row=1, column=0, padx=5, pady=5)

        # 功能按钮
        btn_frame = tk.Frame(info_frame)
        btn_frame.grid(row=0, column=1, rowspan=2, padx=20)
        ttk.Button(btn_frame, text="复制十六进制", command=self.copy_hex).pack(fill="x", pady=2)
        ttk.Button(btn_frame, text="复制RGB", command=self.copy_rgb).pack(fill="x", pady=2)
        ttk.Button(btn_frame, text="重置颜色", command=self.reset_color).pack(fill="x", pady=2)

        # 初始化颜色
        self.update_color()

    # 实时更新颜色预览和色值
    def update_color(self, *args):
        try:
            r = self.r.get()
            g = self.g.get()
            b = self.b.get()
            # 限制数值范围 0-255
            r = max(0, min(255, r))
            g = max(0, min(255, g))
            b = max(0, min(255, b))

            # 转换为十六进制颜色
            hex_color = f"#{r:02X}{g:02X}{b:02X}"
            # 更新预览画布
            self.color_canvas.config(bg=hex_color)
            # 更新标签文本
            self.hex_label.config(text=f"十六进制: {hex_color}")
            self.rgb_label.config(text=f"RGB: ({r}, {g}, {b})")
        except:
            pass

    # 复制十六进制色值到剪贴板
    def copy_hex(self):
        hex_str = self.hex_label.cget("text").split(": ")[1]
        self.root.clipboard_clear()
        self.root.clipboard_append(hex_str)
        messagebox.showinfo("成功", "十六进制色值已复制到剪贴板！")

    # 复制 RGB 色值到剪贴板
    def copy_rgb(self):
        rgb_str = self.rgb_label.cget("text").split(": ")[1]
        self.root.clipboard_clear()
        self.root.clipboard_append(rgb_str)
        messagebox.showinfo("成功", "RGB 色值已复制到剪贴板！")

    # 重置为默认颜色（黄色）
    def reset_color(self):
        self.r.set(255)
        self.g.set(255)
        self.b.set(0)
        self.update_color()

if __name__ == "__main__":
    root = tk.Tk()
    app = ColorPicker(root)
    root.mainloop()