相关文章推荐
光明磊落的葡萄酒  ·  Python Tkinter ...·  2 周前    · 
飞翔的豆浆  ·  BT601/BT709/BT2020 ...·  1 月前    · 

纯python实现一款屏幕取色工具,界面使用tkinter实现

这是一款纯python实现一款屏幕取色工具,界面使用tkinter实现。 下载地址


桌面取色工具


实现原理

原理其实很简单,点击取色,弹出一个全屏的透明窗口,获取鼠标点击的位置,在使用ImageGrab.grab()对屏幕截屏,获取鼠标所在位置的颜色。

关键代码

弹出全屏窗口并设置透明

def open_top_win():
    top = Toplevel()
    w = top.winfo_screenwidth()
    h = top.winfo_screenheight()
    top.geometry(f"{w}x{h}+0+0") # 设置大小
    top.overrideredirect(True) # 隐藏窗口栏
    top.attributes('-alpha', 0.01) # 设置透明度 最小0.01 设置为0 界面会消失掉
    top.configure(cursor="crosshair") # 设置鼠标样式
    top.bind("<Button-1>", callback)  # 设置点击鼠标事件
    top.mainloop()

截屏获取颜色

在回调函数中进行截屏,在通过鼠标位置获取该坐标的颜色值。

# 点击后的回调 截屏获取获取颜色值
    def callback(evt):
        top.destroy()
        img = ImageGrab.grab()
        img = img.resize((w, h))
        px = img.load()
        img.close()
        rgb = px[evt.x, evt.y]
        hex_color = rgb2hex(rgb)
        set_color(rgb, hex_color)

窗口大小和截屏的图片大小不一致

如果是win系统,设置了缩放与布局(通常是125%),会出现点击的颜色和返回的颜色不一致的问题,将比例改为100%就会正常取色。但是这样去改系统还是比较麻烦,其实可以在程序里面,将截取的图片,缩放到和窗口大小一样就行。

# 对截图大小重置为窗口大小。
img = img.resize((w, h))

取色板

取色笔是tk自带组件,调用相关的包就行了。

from tkinter import colorchooser