#!python # -*- mode: python; Encoding: utf-8; coding: utf-8 -*- # Last updated: <2024/05/22 06:30:57 +0900> """ PyAutoGUI、pynput、tkinter を使って、 デスクトップ上の一点をマウスクリックすると色を取得するサンプル。 ボタンを押すと色取得モードになり、 デスクトップ上をマウスクリックすると色が取得できる。 pynputを使って、デスクトップ上のマウスクリックを検出している。 Windows10 x64 22H2 Python 3.10.10 64bit + PyAutoGUI 0.9.54 + pynput 1.7.6 """ import tkinter as tk import pyautogui from pynput import mouse import pyperclip DEF_MSG = "Get color" listener = None getting = False def display_rgb(x, y): global rgblbl, rgbflbl, collbl r, g, b = pyautogui.screenshot().getpixel((x, y)) rf = float(r) / 255.0 gf = float(g) / 255.0 bf = float(b) / 255.0 rgbftext = "%.4f, %.4f, %.4f" % (rf, gf, bf) rgblbl.config(text="RGB : %d, %d, %d" % (r, g, b)) rgbflbl.config(text=rgbftext) collbl.config(bg="#%02x%02x%02x" % (r, g, b)) return rgbftext def on_move(x, y): display_rgb(x, y) def on_click(x, y, button, pressed): global listener, getting, btn, root if pressed: rgbftext = display_rgb(x, y) # to clipboard pyperclip.copy(rgbftext) btn.config(text="Copied !") listener.stop() getting = False root.after(1000, set_default_msg) def set_default_msg(): global btn btn.config(text=DEF_MSG) def start_get_color(): global listener, getting, btn, rgblbl listener = mouse.Listener(on_click=on_click, on_move=on_move) listener.start() btn.config(text="Please click desktop") getting = True def on_close(): global listener, getting if getting: listener.stop() root.destroy() def close(e): global listener, getting if getting: listener.stop() root.destroy() # ---------------------------------------- # main # init tkinter root = tk.Tk() root.attributes("-topmost", True) root.title("Color picker") # root.geometry("260x200") btn = tk.Button(text=DEF_MSG, command=start_get_color, font=("Arial", 13), width=25) rgblbl = tk.Label(root, text="RGB : 0, 0, 0") rgbflbl = tk.Label(root, text="0.0000, 0.0000, 0.0000") collbl = tk.Label( root, text="", width=10, height=4, bg="black", borderwidth=1, relief=tk.SOLID ) btn.pack(padx=8, pady=4) rgblbl.pack() rgbflbl.pack() collbl.pack(padx=8, pady=8) root.bind("", close) root.bind("", close) root.protocol("WM_DELETE_WINDOW", on_close) root.mainloop()