#!python # -*- mode: python; Encoding: utf-8; coding: utf-8 -*- # Last updated: <2024/05/22 05:32:59 +0900> """ デスクトップ上の色を取得する。PyAutoGUI, tkinter を使用。 tkinterのウインドウ外のマウスクリックを検出する方法が分からないので、 Enterキー、またはCキーを押して、マウスクリックの代わりにしている。 Reference: Pythonでマウス座標をリアルタイムで取得して表示するGUIアプリを作る https://yu-nix.com/archives/python-zahyo-syutoku/ Windows10 x64 22H2 + Python 3.10.10 64bit + PyAutoGUI 0.9.54 """ import pyautogui as ag import tkinter as tk import pyperclip DELAYMS = 100 # milliseconds def display_pos_rgb(x, y, rgb): r = float(rgb[0]) / 255.0 g = float(rgb[1]) / 255.0 b = float(rgb[2]) / 255.0 rgbftext = "%.4f, %.4f, %.4f" % (r, g, b) root.poslabel.config(text=f"Pos : {x}, {y}") root.rgblabel.config(text=f"RGB : {rgb}") root.rgbflabel.config(text=rgbftext) root.collabel.config(bg="#%02x%02x%02x" % rgb) return rgbftext def set_clipboard(e): global cnt x, y = ag.position() rgb = ag.pixel(x, y) rgbftext = display_pos_rgb(x, y, rgb) # to clipboard pyperclip.copy(rgbftext) root.reslabel.config(text="copied!") root.reslabel.after(750, clear_msg) def clear_msg(): root.reslabel.config(text="") def update(): global cnt x, y = ag.position() # get mouse position rgb = ag.pixel(x, y) # get color display_pos_rgb(x, y, rgb) root.after(DELAYMS, update) def close(e): root.destroy() # initialize tkinter root = tk.Tk() root.attributes("-topmost", True) root.title("Color picker") # root.geometry("320x240") root.reslabel = tk.Label(text="", font=("Arial", 16)) root.poslabel = tk.Label(text="Pos : ") root.rgblabel = tk.Label(text="RGB : ") root.rgbflabel = tk.Label(text="") root.msglabel = tk.Label(text="C / Enter / Space key : get color") root.collabel = tk.Label( text="", width=15, height=4, bg="green", borderwidth=1, relief=tk.SOLID ) root.reslabel.pack() root.poslabel.pack() root.rgblabel.pack() root.rgbflabel.pack() root.msglabel.pack(padx=10) root.collabel.pack(padx=10, pady=10) # bind key root.bind("", close) root.bind("", close) root.bind("", set_clipboard) root.bind("", set_clipboard) root.bind("", set_clipboard) root.after(DELAYMS, update) root.mainloop()