You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 05:50:35