pyautogui.locateCenterOnScreen()返回None而不是坐标

时间:2015-08-22 12:17:56

标签: python python-3.4 pyautogui

import pyautogui
print (pyautogui.locateCenterOnScreen("C:\Users\Venkatesh_J\PycharmProjects\mouse_event\mouse_event.png"))

不返回坐标,而是返回None

7 个答案:

答案 0 :(得分:6)

看起来像couldn't find任何与屏幕上的图片相匹配的内容。

  

locateCenterOnScreen(image, grayscale=False) - 返回屏幕上第一个找到的图像实例中心的(x,y)坐标。如果在屏幕上找不到,则返回None。

答案 1 :(得分:3)

我的问题解决了当我用pyautogui内置函数截取屏幕截图而不是 WIN + Printscr ,因为如果我们通过 WIN + Printscr 截取截图,那么像素密度和其他图像与pyautogui内置功能相比,相关数据可能有所不同。可能这件事对我来说对你有用了 对于Ex - wifi.png wifi.png所以首先我拍完全截图,然后从完整图像裁剪出来,然后我把它放在我的代码中,如下所示

import pyautogui
print(pyautogui.locateCenterOnScreen('wifi.png'))

答案 2 :(得分:2)

最初的问题非常简单 - 图书馆找不到屏幕上显示的图像,因此返回None而不是坐标,因为它会in the docs

但是,这里可能存在误解,特别是来自在问题上发布赏金并提出similar question here.的用户。发表评论

  

"图片在我的桌面上"

使用此功能时,将文件名作为字符串传递。然后,库加载图像文件并在屏幕上查找图片(而不是文件名)。 pyautogui.locatecentreonscreen()会在屏幕上显示 实际图片 。它不会在桌面上查找文件,也不会查找与传递给它的图像同名的文件图标。

实施例

假设您有一个名为flower.jpg的文件,其中包含以下图片,保存在桌面上。

enter image description here

如果没有其他窗口打开,请运行:

coords = pyautogui.locateCenterOnScreen('C:\\Richard\\Users\\flower.jpg')
print(coords)

结果为None

这是因为即使桌面上有一个名为flower.jpg 的图标,该图片也不会显示在我的屏幕 上。即使该图标是花的小规模版本,也是如此。

但是,如果我让图像可见(因为我正在准备这篇文章)并做同样的事情,我会得到协调 - 例如:

enter image description here

如您所见 - 因为实际图像在屏幕上,图书馆找到它,坐标为524,621

总之,如果图书馆没有找到屏幕上显示给用户的图像,它将返回None。请注意,图像必须在运行代码时对用户可见。它无法在您的桌面上找到相应的图标,或类似的图标,或者隐藏在"隐藏的窗口中的图像。落后于另一个那是你想要做的吗?

答案 3 :(得分:0)

您确定图片的尺寸与图标相同吗?

如果不是pyautogui.locateCenterOnScreen()会引发TypeError: 'NoneType' object is not iterable

还要确保完整图标可见并且与图像相同:"C:\Users\Venkatesh_J\PycharmProjects\mouse_event\mouse_event.png"

希望问题解决了!

答案 4 :(得分:0)

根据Don Kirby的说法,在屏幕上找不到匹配的图像 。您可以在Windows照片库(或Tk)中打开图像,然后pyautogui会找到它。

答案 5 :(得分:0)

  

很好的解释,有没有什么库比pyautogui更好?我的意思是它想在屏幕上显示相同的图片。有时我们需要类似的东西。 – GLHF '16 May 11 '15:45

尝试使用以下代码行:

pyautogui.locateCenterOnScreen("yourscreenshot.PNG", confidence=0.9)

我相信信心范围是0.1-0.9。 除非您有几张看上去几乎相同的图片,否则可以解决该异常。 如果这样不起作用,请尝试使用更多/更少的原始图像制作第二个屏幕截图,然后编写以下代码:

try:
    pyautogui.locateCenterOnScreen("yourscreenshot.PNG", confidence=0.9)
except TypeError:
    pyautogui.locateCenterOnScreen("yourscreenshot2.PNG", confidence=0.9)

这会再次尝试使用稍微不同的图片,并希望不会返回TypeError。

答案 6 :(得分:0)

如果由于图像问题而无法使用pyautogui.locateCenterOnScreen(),请尝试使用截屏工具(如果在Windows上)拍摄屏幕快照。 另外,请确保您已下载“枕头”模块