2

我正在使用pyautogui单击一个按钮,该按钮会定期在我的 GUI 上弹出,如下面的脚本所示。但是,当按钮不在屏幕上时,脚本会在循环时发出两声烦人的哔声。

如果我替换pyautogui.locateOnScreen(...)None,如果图像无法在屏幕上定位,这似乎是返回值,声音似乎消失了。

该脚本使用 python 2.7 在 Jupyter Notebook (v4) 中运行,我使用的是带有 Gnome 的 Debian 8.1。

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 问题/“功能”……

编辑 2

pyautogui.locateOnScreen这里导入,见第 238 行。它实际上似乎引发了一个异常:

    except ImageNotFoundException:
        if time.time() - start > minSearchTime:
            raise
4

2 回答 2

1

我也在 GNU/Linux 上,并且在 pyautogui.locateOnScreen() 函数运行时遇到哔哔声(无论它是否找到图像)。

我发现 scrot 是罪魁祸首。解决方案:

  1. $ sudo mv /usr/bin/scrot /usr/bin/scrot-noisy

  2. 使用以下内容创建 /usr/bin/scrot:

#!/bin/bash

scrot-noisy --silent "$@"

  1. $ sudo chmod a+x /usr/bin/scrot
于 2016-01-12T20:38:07.470 回答
0

好的,我找到了解决蜂鸣声的方法。

在转到从中导入的模块的源代码pyautogui.locateOnScreen之后,我相信该函数会在某个地方引发自定义 ImageNotFoundException 。我没有完全调试它。

在 Gnome 上,所有异常都会通过恼人的哔声宣布。

为我做的解决方法是完全关闭系统蜂鸣声

我将以下行添加到~/.xsession

xset b off

这杀死了哔哔声。

于 2015-10-23T09:18:33.073 回答