python - 为什么我的 if 在循环中发出哔哔声

标签 python ipython jupyter pyautogui

我正在使用 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 问题/“功能”……

编辑2

pyautogui.locateOnScreen 是从 here 导入的,请参阅第 238 行。它实际上确实引发了异常:

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

最佳答案

我也在 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

关于python - 为什么我的 if 在循环中发出哔哔声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33279832/

相关文章:

python - Plotly:如何使用 updatemenus 更新具有多个依赖轨迹的图形?

python - 如何保存 PIL ImageGrab() img?

windows - 将 IPython 配置为使用 powershell 而不是 cmd

python - 如何在 Spyder/IPython/matplotlib 中再次获得交互式绘图?

python - 使用 xlrd 读取日期并使用 xlsxwriter 在 Python 中写入日期

python - Jupyter (iPython) 笔记本说 "cannot find a kernel matching Python [Root]"

python - 弹出/扩展 jupyter 单元格到新的浏览器窗口

python - 升级 Ipython 时出现问题(prompt_toolkit 不兼容)

python - 在 jupyter 上安装 gnuplot

python - 如何使用Python中的Tkinter,使用几个选定颜色的迭代来更改Python中的圆圈颜色,这些颜色随着每次按下按钮而变化?