Python+Tkinter开发:专业级RGB颜色混合器与屏幕取色工具

功能概述:
1. 实时屏幕取色功能:自动捕捉鼠标所在位置的屏幕颜色
2. RGB三色混合器:通过滑动条精确控制红、绿、蓝三色分量
3. 颜色预览:实时显示混合后的颜色效果
4. 便捷操作:支持鼠标滚轮微调颜色值

技术特点:
- 基于Python 3.x和Tkinter GUI框架开发
- 使用PIL库实现屏幕像素捕获
- 响应式设计,操作流畅
- 精确的颜色值显示(RGB和十六进制)

使用场景:
- 设计师和开发者快速获取屏幕颜色
- 教学演示RGB颜色混合原理
- 作为颜色选择工具嵌入其他应用
- Python GUI开发学习参考

运行要求:
- Python 3.6+
- Pillow库(PIL分支)
- Windows/macOS/Linux系统

使用方法:
1. 运行程序后移动鼠标即可取色
2. 拖动滑动条调节RGB分量
3. 鼠标悬停在滑动条上可使用滚轮微调

import tkinter as tk
from PIL import ImageGrab


class ColorMixerApp:
    def __init__(self, master):
        self.master = master
        master.title("RGB颜色混合器")
        master.geometry("520x300")  # 减小窗口高度

        # 顶部标签减少垂直间距
        self.top_label = tk.Label(master, text="屏幕坐标: (0, 0) | RGB: (255,255,255)", font=('Arial', 9))
        self.top_label.pack(side=tk.TOP, pady=3)

        # 控制面板调整边距
        control_frame = tk.Frame(master)
        control_frame.pack(side=tk.LEFT, padx=10, pady=5)

        # 创建颜色滑动条
        self.red = self.create_slider(control_frame, "红", 255)
        self.green = self.create_slider(control_frame, "绿", 255)
        self.blue = self.create_slider(control_frame, "蓝", 255)

        # 创建右侧颜色显示区域
        self.canvas = tk.Canvas(master, width=280, height=280, bg='#f0f0f0')
        self.canvas.pack(side=tk.RIGHT, padx=10, pady=5)
        self.circle = self.canvas.create_oval(20, 40, 220, 240, fill="#ffffff")

        # 启动颜色检测
        self.detect_screen_color()

        # 绑定鼠标滚轮事件
        master.bind("<MouseWheel>", self.on_scroll)

    def detect_screen_color(self):
        x, y = self.master.winfo_pointerxy()
        try:
            # 获取屏幕尺寸限制坐标范围
            screen_width = self.master.winfo_screenwidth()
            screen_height = self.master.winfo_screenheight()
            x = max(0, min(x, screen_width - 1))
            y = max(0, min(y, screen_height - 1))

            img = ImageGrab.grab().convert('RGB')
            pixel = img.getpixel((x, y))

            # 更健壮的RGB值获取方式
            if isinstance(pixel, (tuple, list)) and len(pixel) >= 3:
                r, g, b = pixel[:3]  # 确保只取前三个通道
            else:
                raise ValueError("无效的像素格式")

            # 更新顶部标签
            self.top_label.config(text=f"屏幕坐标: ({x}, {y}) | RGB: ({r}, {g}, {b})")

        except Exception as e:
            print(f"取色错误: {str(e)}")
        self.master.after(100, self.detect_screen_color)

    def create_slider(self, parent, label_text, default_value):
        frame = tk.Frame(parent)
        frame.pack(pady=10)

        label = tk.Label(frame, text=label_text, width=5)
        label.pack(side=tk.LEFT)

        slider = tk.Scale(frame, from_=0, to=255, orient=tk.HORIZONTAL,
                          length=200, command=lambda _: self.update_color())
        slider.set(default_value)
        slider.pack(side=tk.LEFT)
        return slider

    def update_color(self):
        r = self.red.get()
        g = self.green.get()
        b = self.blue.get()
        hex_color = f"#{r:02x}{g:02x}{b:02x}"
        self.canvas.itemconfig(self.circle, fill=hex_color)

    def on_scroll(self, event):
        # 修复后的判断逻辑
        x, y = self.master.winfo_pointerxy()
        current_slider = None

        # 检查鼠标位置对应的控件
        for slider in [self.red, self.green, self.blue]:
            if slider.winfo_containing(x, y) == slider:
                current_slider = slider
                break

        if current_slider:
            value = current_slider.get()
            new_value = max(0, min(255, value + (1 if event.delta > 0 else -1)))
            current_slider.set(new_value)
            self.update_color()


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

        此基于 Python 和 Tkinter 的图形界面应用程序,主要用于 RGB 颜色的混合和屏幕取色。这个工具特别适合需要精确控制颜色或获取屏幕颜色的工作场景,其简洁的界面和实时反馈机制大大提升了工作效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值