使用Pynput实现点击检测:每次点击输出不同文本并播放音频的实现问询
功能实现方案
前置依赖安装
先安装需要的第三方库:
pip install pynput playsound==1.2.2
指定playsound 1.2.2版本是为了避免高版本在Windows系统下的兼容性问题。
完整可运行代码
from pynput.mouse import Listener from playsound import playsound # -------------------------- 自定义配置区 -------------------------- TEXT_LIST = ["HI", "WHY", "BYE"] # 按点击顺序轮询的文本列表 PRESS_AUDIO_LIST = ["food.wav", "why_press.wav", "bye_press.wav"] # 按下鼠标时对应播放的音频路径 RELEASE_AUDIO_LIST = ["click.wav", "why_release.wav", "bye_release.wav"] # 松开鼠标时对应播放的音频路径 LOOP_MODE = True # 点击次数超过列表长度后是否从头循环,设为False则固定使用最后一组配置 # ------------------------------------------------------------------- current_idx = 0 # 记录当前轮次对应的索引 def on_click(x, y, button, pressed): global current_idx max_support_idx = len(TEXT_LIST) - 1 # 计算当前实际使用的索引,兼容循环/非循环模式 if current_idx <= max_support_idx: use_idx = current_idx else: use_idx = current_idx % (max_support_idx + 1) if LOOP_MODE else max_support_idx if pressed: # 按下动作逻辑 print(f"{TEXT_LIST[use_idx]} - Clicked") # 播放按下对应音频,加异常捕获避免文件不存在导致崩溃 try: if use_idx < len(PRESS_AUDIO_LIST): playsound(PRESS_AUDIO_LIST[use_idx]) except: pass else: # 松开动作逻辑 print(f"{TEXT_LIST[use_idx]} - Unclicked") try: if use_idx < len(RELEASE_AUDIO_LIST): playsound(RELEASE_AUDIO_LIST[use_idx]) except: pass # 松开后索引+1,下一次点击使用下一组配置 current_idx += 1 # 如果需要在最后一次点击后停止监听,可取消下面两行注释 # if use_idx == max_support_idx and not LOOP_MODE: # return False if __name__ == "__main__": with Listener(on_click=on_click) as listener: listener.join()
逻辑说明
- 全局变量
current_idx记录点击轮次,每次鼠标松开后自增,保证同一次按下、松开动作使用同一组文本和音频,符合需求的输出规则 - 所有自定义内容都放在配置区,直接修改对应列表即可适配自己的文本、音频路径要求,音频数量和文本数量不匹配时也不会报错,缺失的音频会自动跳过播放
- 如果需要限制监听次数,只需要在松开逻辑里补充
return False的触发条件即可终止监听
内容的提问来源于stack exchange,提问作者j6n
相关产品推荐
相关产品推荐

