pyautogui 屏幕倍率的坑

发布时间 2023-09-12 13:40:19作者: 逆行

在我的2倍屏设备上,鼠标移动不准确。

直接上演示代码

import pyautogui

screenSize = pyautogui.size()
print(screenSize)
# 输出:Size(width=1512, height=982)。 这是屏幕尺寸,以dip(设备独立像素device-independent pixel)度量。

buttonPoint = pyautogui.locateCenterOnScreen('test.png')
print(buttonPoint)
# 输出:Point(x=2443, y=424)。可见x比screenSize.width还大,这是以像素进行度量的。
# 该函数的原理其实就是pyautogui对屏幕进行截图,并在截图上找到目标位置,因此是以像素单位作为度量。
# 这就是问题所在

# 如果没有根据屏幕倍率对像素进行转换,直接把像素坐标用到鼠标相关函数,就是错误的。
pyautogui.moveTo(buttonPoint.x, buttonPoint.y)
# 此时,发现鼠标移到了屏幕最边缘。

screenScale = 2 # 屏幕缩放比例
pyautogui.moveTo(buttonPoint.x / screenScale, buttonPoint.y / screenScale)
# 此时,鼠标才能移动到目标位置。

【上述代码仅做演示,更好的处理方法应该封装出一个函数,能根据屏幕倍率对像素位置进行转换。】