功能概述:
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 颜色的混合和屏幕取色。这个工具特别适合需要精确控制颜色或获取屏幕颜色的工作场景,其简洁的界面和实时反馈机制大大提升了工作效率。