pyautogui.pixel(x,y)开始在while循环中滞后

时间:2019-04-30 12:02:34

标签: python pyautogui

我想检查屏幕上的像素何时改变,然后在像素改变颜色时发出键盘事件。但是在大约2-4分钟后,多次调用pyautogui.pixel()时计算机速度变慢。

这是我的代码

import pyautogui

OldC1 = None

while True:
   NewC1 = pyautogui.pixel(750, 550)

   if NewC1 != OldC1:
      pyautogui.press('up')

   OldC1 = NewC1;

有没有办法解决滞后问题?

2 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,我解决该问题的方法是直接使用PIL的函数,而不是pyautogui的包装函数:

git merge --squash branch

使用此功能不会降低我的电脑的速度。

答案 1 :(得分:0)

问题不在于您用来获取值的函数,而是来自一直持续运行的无限循环。

如果不需要时间精度,那么我建议通过类似于sleep()的函数在循环周期上加一个瓶颈

尝试:

from PIL import ImageGrab
import time

OldC1 = (0, 0, 0)

while True:

   time.sleep(.3)
   NewC1 = ImageGrab.grab().getpixel((750, 550))

   if NewC1 != OldC1:
      pyautogui.press('up')

   OldC1 = NewC1

time.sleep(2)可以减少迭代的频率,从长远来看又可以带来更好的性能。

编辑:

我不是使用pyautogui的像素函数来获取特定像素的RGB值,而是使用了getpixel()(Python Imaging Library)模块中的PIL,原因是因为{{ 1}}函数只是pyautogui.pixel()的包装,并且由于我们追求性能,因此我们应该直接使用ImageGrab.grab().getpixel(),以提高性能。

PS:

getpixel()的总像素查找限制为10,000左右。 Read This Answer。如果查找值超过10,000,则pyautogui.pixel()的{​​{1}}没有此阈值,这可能会导致错误的结果。