在不同的计算机上以不同的分辨率运行Pyautogui

问题描述 投票:0回答:3

我有一个 python 脚本,可以在我的工作计算机(1600 x 900 分辨率)上完美运行。我在这台计算机上拍摄了 pyautogui.locateOnScreen 使用的所有屏幕截图。我尝试在我的家用笔记本电脑上以不同的分辨率(1340 x 640)运行此程序,但脚本似乎找不到图像位置。我猜这是因为分辨率不同。 (我已将脚本文件夹从工作计算机复制到家庭计算机,因此图像文件的路径完全相同)。我可以在脚本中更改任何内容,以便 pyautogui.locateOnScreen 可以识别任何计算机分辨率上的图像吗?

python-3.4 screen-resolution pyautogui
3个回答
14
投票

我是 PyAutoGUI 的创建者。您遇到的问题不在于屏幕分辨率,而在于屏幕缩放。您的程序将在不同分辨率的显示器上正常运行。但在高分辨率下,程序的文本和按钮会变得太小,因此 Windows 和 macOS 通过“屏幕缩放”来解决此问题,这可以将文本和按钮等 UI 元素的大小增加 150% 或 200%。如果您有多个显示器,则每个显示器都可以有自己的屏幕缩放设置;例如,一台显示器为 100%,另一台显示器为 150%。

如果您在显示器处于 100% 比例时截取屏幕截图,然后尝试在缩放为 200% 的显示器上使用它,则图像将不匹配,因为屏幕截图实际上是屏幕宽度和长度的一半。在 200% 显示器上会是什么样子。

到目前为止,还没有解决这个问题的方法。调整屏幕截图的大小可能不起作用,因为可能存在细微的差异,并且屏幕截图机制当前需要像素完美匹配。您只需使用不同的屏幕缩放设置在显示器上重新截取屏幕截图即可。


3
投票

我认为您需要在不同分辨率下截取图像的屏幕截图,并在程序启动时让它检测它是在 1600x900 屏幕还是 1340x640 屏幕上。然后让所有“locateOnScreen”部分都采用一个变量,并根据屏幕尺寸,将这些变量替换为正确图像的路径。

import pyautogui

def function():
    pyautogui.locateOnScreen(x)
    ...
    pyautogui.locateOnScreen(y)
    ...

screen = pyautogui.size()
if screen = (1600, 900):
    x = 'image1_1600_900.png'
    y = 'image2_1600_900.png'
else:
    x = 'image1_1340_640.png'
    y = 'image2_1340_640.png'

function()

0
投票
  1. 分辨率并不重要,重要的是缩放。因此,如果您在比例为 150% 时截取了屏幕截图,那么您的脚本将适用于比例为 150% 的每个分辨率。(您可以在电脑的显示设置中检查比例)。
  2. 我建议您以 100% 比例截取屏幕截图,因为对于每种分辨率,此比例都可用。
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.