我使用pyautogui点击我的GUI上定期弹出的按钮,如下面的脚本所示。但是,当按钮不在屏幕上时,脚本会在循环时发出两声恼人的嘟嘟声。
如果我将pyautogui.locateOnScreen(...)
替换为None
,如果图片无法在屏幕上显示,这似乎是返回值,则声音似乎消失了。
该脚本使用python 2.7在Jupyter Notebook(v4)中运行,我在Debian 8.1上使用Gnome运行。
import pyautogui
import time
starttime = time.time()
while time.time()-starttime<10:
img_path_inactive = "/home/user/folder/inactive_target.png"
img_path_active = "/home/user/folder/active_target.png"
img_list = [img_path_inactive, img_path_active]
get_target = map(pyautogui.locateOnScreen, img_list) # <--- This line beeps! See edit 2
if any(get_target):
pyautogui.click(filter(None, get_target)[0][0], filter(None, get_target)[0][1])
# The if check above was previously (hence the title):
# if pyautogui.locateOnScreen(img_path_active) or pyautogui.locateOnScreen(img_path_inactive):
# click_target = pyautogui.locateOnScreen(img_path_active) or pyautogui.locateOnScreen(img_path_inactive)
# pyautogui.click(click_target[0], click_target[1])
time.sleep(2)
print("Finished loop.")
修改
我将脚本放在.py文件中并从命令行运行它以检查它是否是一个jupyter的东西。尽管如此,它仍然存在。
之后我针对三张图片跑了pyautogui.locateOnScreen
,这造成了三次哔哔声......所以它肯定是一个pyautogui问题/&#39;功能&#39; ...
修改2
pyautogui.locateOnScreen
是从here导入的,请参阅第238行。实际上它确实会引发异常:
except ImageNotFoundException:
if time.time() - start > minSearchTime:
raise
答案 0 :(得分:1)
我也在使用GNU / Linux并在pyautogui.locateOnScreen()函数运行时遇到哔哔声(无论它是否找到图像)。
我发现scrot是罪魁祸首。解决方案:
$ sudo mv / usr / bin / scrot / usr / bin / scrot-noisy
使用以下内容创建/ usr / bin / scrot:
#!/斌/庆典
scrot-noisy --silent“$ @”
答案 1 :(得分:0)
好的,我找到了哔哔声的解决方法。
在转到导入pyautogui.locateOnScreen
的{{3}}后,我相信该函数会在轨道的某处引发自定义ImageNotFoundException。我没有完全调试它。
在Gnome上,所有异常都是由一声恼人的哔哔声宣布的。
为我做的解决方法是source of the module。
我将以下行添加到~/.xsession
:
xset b off
杀死了哔哔声。