我想检查屏幕上的像素何时改变,然后在像素改变颜色时发出键盘事件。但是在大约2-4分钟后,多次调用pyautogui.pixel()
时计算机速度变慢。
这是我的代码
import pyautogui
OldC1 = None
while True:
NewC1 = pyautogui.pixel(750, 550)
if NewC1 != OldC1:
pyautogui.press('up')
OldC1 = NewC1;
有没有办法解决滞后问题?
答案 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}}没有此阈值,这可能会导致错误的结果。