首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pyautogui.pixel(x,y)开始滞后于while循环

pyautogui.pixel(x,y)开始滞后于while循环
EN

Stack Overflow用户
提问于 2019-04-30 12:02:33
回答 2查看 2.1K关注 0票数 0

我想检查屏幕上的像素何时发生变化,然后在像素改变颜色时放置键盘事件。但是在大约2-4分钟之后,当pyautogui.pixel()被多次调用时,计算机会慢下来。

这是我的密码

代码语言:javascript
运行
复制
import pyautogui

OldC1 = None

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

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

   OldC1 = NewC1;

有什么办法可以避免这种滞后吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-19 01:22:14

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

代码语言:javascript
运行
复制
from PIL import ImageGrab

pixelRGB = ImageGrab.grab().getpixel((x, y))

使用这个功能并没有减慢我的电脑速度。

票数 2
EN

Stack Overflow用户

发布于 2019-05-19 01:59:39

问题不在于用于获取值的函数,而在于一直在运行的无限循环。

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

TRY:

代码语言:javascript
运行
复制
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值,而是使用了来自PIL (Python )模块的getpixel(),原因是pyautogui.pixel()函数只是ImageGrab.grab().getpixel()的包装器,而且由于我们正在努力提高性能,所以应该直接使用getpixel()来提高性能。

PS:

pyautogui.pixel()有一个总像素查找的限制,大约在10,000左右。Read This Answer。这可能导致不正确的结果,如果查找值超过10,000,PILgetpixel()没有这个阈值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55920549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档