Python屏幕图像识别脚本:按键暂停/继续功能实现求助
问题分析与修复方案
原代码错误点
- 按下P键直接退出程序:
stoper函数中调用exit()会直接终止整个Python进程,而非暂停运行 - 按键监听逻辑无效:
keyboard.read_key()仅会阻塞监听一次按键,无法反复响应P键的暂停/恢复切换 - 缺少状态控制变量:没有共享状态标记程序的运行/暂停状态,检测线程无法根据状态调整执行逻辑
正确实现代码
通过共享状态变量控制检测线程的运行,同时用keyboard.add_hotkey实现P键的反复监听切换:
import pyautogui import time import keyboard from threading import Thread # 共享状态变量:标记程序是否暂停 is_paused = False def toggle_pause(): global is_paused is_paused = not is_paused status = "暂停" if is_paused else "恢复运行" print(f'程序已{status}...') def screen_detection(): while True: # 暂停状态下跳过检测 if not is_paused: if pyautogui.locateOnScreen('image.png', confidence=0.5) is not None: print("I can see it") else: print("I am unable to see it") time.sleep(0.5) # 暂停时短暂休眠,避免占用过多CPU else: time.sleep(0.1) if __name__ == '__main__': # 注册P键热键,每次按下触发暂停/恢复切换 keyboard.add_hotkey('p', toggle_pause) # 启动检测线程(daemon=True:主线程退出时自动终止该线程) Thread(target=screen_detection, daemon=True).start() # 主线程保持运行,避免程序退出 while True: time.sleep(1)
代码说明
is_paused全局变量作为状态标记,直接控制检测线程的执行逻辑toggle_pause函数负责切换is_paused的状态,并打印当前状态提示keyboard.add_hotkey注册P键为全局热键,每次按下都会触发状态切换- 检测线程在暂停状态下进入短休眠,减少CPU资源占用
- 主线程通过无限休眠保持程序运行,确保热键监听始终有效
内容的提问来源于stack exchange,提问作者Blockhead01
相关产品推荐
相关产品推荐

