import pyautogui
print (pyautogui.locateCenterOnScreen("C:\Users\Venkatesh_J\PycharmProjects\mouse_event\mouse_event.png"))
它不返回坐标,而是返回None
。
import pyautogui
print (pyautogui.locateCenterOnScreen("C:\Users\Venkatesh_J\PycharmProjects\mouse_event\mouse_event.png"))
它不返回坐标,而是返回None
。
似乎在屏幕上找不到与您的图像匹配的任何内容。
locateCenterOnScreen(image, grayscale=False)
- 返回屏幕上第一个找到的图像实例的中心的 (x, y) 坐标。如果在屏幕上找不到,则返回 None。
最初的问题非常简单 - 库没有找到屏幕上表示的传递图像,因此返回而不是像它在 docs 中None
所说的那样返回坐标。
但是,这里可能存在误解,特别是来自在该问题上发布赏金并在此处提出类似问题的用户。. 发表了评论
“照片在我的桌面上”
使用此函数时,您将文件名作为字符串传入。然后库加载图像文件并在屏幕上查找图片(而不是文件名)。 如果它在屏幕上可见,pyautogui.locatecentreonscreen()
将寻找实际图像。它不会在桌面上查找文件,也不会查找与传递给它的图像同名的文件图标。
假设您有一个名称flower.jpg
包含以下图像的文件,该文件保存在您的桌面上。
在没有其他窗口打开的情况下,运行:
coords = pyautogui.locateCenterOnScreen('C:\\Richard\\Users\\flower.jpg')
print(coords)
结果是None
这是因为即使桌面上有一个名为 的图标,flower.jpg
该图像也不会显示在我的屏幕上。即使该图标是花朵的小尺寸版本也是如此。
但是,如果我让图像可见(因为我正在准备这篇文章)并做同样的事情,我会得到坐标 - 例如:
如您所见 - 因为实际图像在屏幕上,所以库会找到它,并带有坐标524,621
总之,如果库没有找到屏幕上显示给用户的图像,它将返回 None。请注意,图像必须在代码运行时对用户可见。它不会在您的桌面上找到图标或类似图标,也不会在“隐藏”在另一个窗口后面的窗口中找到图像。那是你想要做的吗?
您确定图像与图标的大小相同吗?
如果没有pyautogui.locateCenterOnScreen()
将提高TypeError: 'NoneType' object is not iterable
还要确保完整的图标可见并且看起来与图像相同:"C:\Users\Venkatesh_J\PycharmProjects\mouse_event\mouse_event.png"
希望问题得到解决!
如果由于图像问题无法使用pyautogui.locateCenterOnScreen()
,请尝试使用截图工具(如果您在 Windows 上)进行截图。它可以工作。还要确保您已下载“枕头”模块
很好的解释,有没有比 pyautogui 更好的库?我的意思是它想要在屏幕上显示完全相同的图片。我们有时需要类似的。– GLHF 2016 年 5 月 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。
根据 Don Kirby 所说的,在屏幕上没有找到匹配的图像。例如,您可以在 Windows 照片库(或Tk
)中打开图像,然后pyautogui
找到它。
尝试这个 :
pip install opencv-contrib-python
运行相同的代码让我很困惑:
coords =pyautogui.locateCenterOnScreen('C:\\test.jpg')
在两个不同的虚拟环境(X 和 Y,几乎相同)中返回None
和Point(x=1543, y=461)
。
我阅读了 Aleks 的答案,并猜测它在当前环境中confidence
隐式使用参数opencv-contrib-python
(Y 有但 X 没有)。
我没有深入研究,只是安装 opencv-contrib-python
在虚拟环境 X 中并解决了我的问题。