栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

4.6.python實現: 取得屏幕上任意點的坐標值和RGB色值

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

4.6.python實現: 取得屏幕上任意點的坐標值和RGB色值

這个腳本是爲了在編寫GUI自動化腳本時, 獲取屏幕上任意位置的準確的坐標值參數而寫.

參考于<>, 細節略改.

1.第三方模凷準備

Win10中python3, 安裝pyautogui模凷:

pip install pyautogui

2.實現代碼
# 根據鼠標移動獲取鼠標的實時位置(坐標)
import time
import pyautogui as pg


try:
    print("n---- Enter +C to exit:n")
    width, height = pg.size()  # 獲取屏幕尺寸(像素)
    print(f"Display resolution: {width} * {height}")  # 打印屏幕分辨率
    print("Mouse position: ", end='')  # 打印鼠标坐標值的前半句
    while True:  # 更新坐標值的無限循環
        x, y = pg.position()  # 獲取鼠標坐標值
        po_str = f"{str(x).rjust(4)}, {str(y).rjust(4)}"  # 拼接坐標值字符串, 非得限定位數不可
        print(po_str, end='')  # 打印坐標字符串
        time.sleep(0.01)  # 等待0.01秒, 降低CPU佔用率
        print('b'*len(po_str), end='', flush=True)  # 使用退格鍵清空上一个坐標值
except KeyboardInterrupt:  # 按下+C結束程序
    exit('nn---- Bye.n')

注意, sleep()延時函數的必要性, 在無此句時, CPU負荷在10%左右; 添加此句後, 在不影响顯示效果的同時(畢竟每秒刷新100下呢!), CPU負荷驟降到了0.3%, 畢竟, 死循環語句如果不在內部設置延時操作, 就相當于要求CPU全力以赴僅僅爲這一个程序發力, 並不值得.

另外, 坐標值字符串的拼接和'b'退格字符的配合也很巧妙, 不會出現因爲坐標值實際位數(如0, 14, 872, 2109)的變化導致更新顯示的錯誤.


3.實現效果

 我的屏幕是2560*1080的, 圖中數值的變化是我依次移動鼠標到四个角的變化, 很方便.


4.擴展, 添加RGB值顯示

核心是使用pyautogui模凷的screenshot()函數獲取屏幕快照, 再使用getpixel()函數獲取指定點的RGB值, 這在GUI自動化腳本中, 可作爲定位的參考, 是有一定意義的.

實現代碼如下:

# 根據鼠標移動獲取鼠標的實時坐標值和RGB值
import time
import pyautogui as pg


try:
    print("n---- Enter +C to exit:n")
    width, height = pg.size()  # 獲取屏幕尺寸(像素)
    print(f"Display resolution: {width} * {height}n")  # 打印屏幕分辨率
    while True:  # 更新坐標值和RGB值的無限循環
        x, y = pg.position()  # 獲取鼠標坐標值
        rgb = pg.screenshot().getpixel((x, y))  # 獲取鼠標點的RGB值
        # 拼接坐標值/RGB值字符串, 注意限定位數
        po_co_str = f"Position: ({str(x).rjust(4)}, {str(y).rjust(4)}) ---- ColorRGB: ({str(rgb[0]).rjust(3)}, {str(rgb[1]).rjust(3)}, {str(rgb[2]).rjust(3)})"
        print(po_co_str, end='')  # 打印坐標字符串
        time.sleep(0.01)  # 等待0.01秒, 降低CPU佔用率
        print('b'*len(po_co_str), end='', flush=True)  # 使用退格鍵清空上一个坐標值
except KeyboardInterrupt:  # 按下+C結束程序
    exit('nn---- Bye.n')

實現效果如下:

能準確地識別RGB值和坐標值

在這之後, 就可以根據獲得的坐標值和RGB值編寫GUI自動化腳本了! 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923584.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号