Pynput脚本按esc暂停home恢复 暂停时a键仍触发功能如何解决
解决方案
你遇到的问题根源是键盘监听事件的回调函数是独立于main线程运行的,你只暂停了main线程的循环,并没有限制监听回调里的按键响应逻辑,所以哪怕处于暂停状态,按下a键还是会触发右键操作。
具体修改点
- 给a键的触发逻辑增加运行状态判断,只有状态为
run时才执行对应操作 - 修正原代码中
Listener的参数拼写错误:supress改为正确的suppress,否则按键拦截功能不会生效 - 优化按键判断的分支逻辑,减少不必要的重复判断
修正后完整代码
import time from threading import Thread from pynput import keyboard from pynput.mouse import Button, Controller from pynput.keyboard import KeyCode mouse = Controller() def exit_program(): def on_press(key): # 仅运行状态响应a键操作 if main.status == 'run' and key == KeyCode.from_char('a'): mouse.press(Button.right) mouse.release(Button.right) if str(key) == 'Key.esc': main.status = 'pause' print("Paused") elif str(key) == 'Key.home': main.status = 'run' print("Resume") elif str(key) == 'Key.end': main.status = 'exit' print("Exit") exit() listener = keyboard.Listener( suppress=True, on_press=on_press) listener.start() def main(): main.status = 'run' while True: print('running') time.sleep(1) while main.status == 'pause': time.sleep(1) if main.status == 'exit': print('Main program closing') break Thread(target=main).start() Thread(target=exit_program).start()
修改后无需添加额外sleep语句,不会出现多线程卡顿问题,暂停状态下按a键不会触发右键操作,完全符合需求。
内容的提问来源于stack exchange,提问作者Jayson
相关产品推荐
相关产品推荐

