【Python】屏幕像素颜色值的获取

一、一个小工具,按住F10键,颜色值会跟着显示。

python 复制代码
import tkinter as tk
import pyautogui
import keyboard

class ColorViewer:
    def __init__(self):
        self.root = tk.Tk()
        self.root.overrideredirect(True)  # 无边框
        self.root.wm_attributes("-topmost", 1)  # 最前
        self.root.configure(bg="black")
        self.root.geometry("140x60")

        self.color_frame = tk.Frame(self.root, width=24, height=48, bg="white")
        self.color_frame.place(x=5, y=5)

        self.hex_label = tk.Label(self.root, text="#------", font=("Consolas", 13), bg="black", fg="white")
        self.hex_label.place(x=35, y=5)

        self.coord_label = tk.Label(self.root, text="(0000,0000)", font=("Consolas", 11), bg="black", fg="white")
        self.coord_label.place(x=35, y=30)

        self.update_loop()

        self.root.withdraw()  # 初始隐藏
        self.root.mainloop()

    def update_loop(self):
        if keyboard.is_pressed("F10"):
            x, y = pyautogui.position()
            r, g, b = pyautogui.screenshot(region=(x, y, 1, 1)).getpixel((0, 0))
            hex_color = "#{:02x}{:02x}{:02x}".format(r, g, b)

            self.color_frame.configure(bg=hex_color)
            self.hex_label.configure(text=hex_color)
            self.coord_label.configure(text=f"({x},{y})")

            # 自动移动窗口,避免遮挡鼠标
            screen_w = self.root.winfo_screenwidth()
            screen_h = self.root.winfo_screenheight()
            win_w, win_h = 140, 60
            offset = 20

            pos_x = x + offset
            pos_y = y + offset
            if pos_x + win_w > screen_w:
                pos_x = x - win_w - offset
            if pos_y + win_h > screen_h:
                pos_y = y - win_h - offset

            self.root.geometry(f"{win_w}x{win_h}+{pos_x}+{pos_y}")
            self.root.deiconify()
        else:
            self.root.withdraw()

        self.root.after(30, self.update_loop)  # 循环检查

if __name__ == "__main__":
    ColorViewer()

二、样式示例