Преобразование цикла while с помощью глобальной горячей клавиши в Python - PullRequest
0 голосов
/ 09 марта 2019

В настоящее время я застрял в программе, которую пишу на Python, используя CV2. Программа работает с циклом while, который запускается горячей клавишей. Я хочу использовать горячую клавишу для включения и выключения программы / цикла. У меня проблема в том, что поскольку функция горячей клавиши находится вне цикла while, она больше не распознается во время работы цикла (по крайней мере, я думаю, что в этом проблема), и поэтому я больше не могу отключить цикл.

Это код, с которым я сейчас работаю:

import PIL.ImageGrab
import cv2
import numpy as np
import time
import pyautogui
from pynput import keyboard
from pynput.keyboard import Key

COMBINATIONS = [
    {keyboard.Key.shift, keyboard.KeyCode(char="a")},
    {keyboard.Key.shift, keyboard.KeyCode(char="A")}
    ]
isRunning = False

current = set()

def test():
    print("This is a seccessful test")

def templateMatch():

        imgGrab = PIL.ImageGrab.grab().save("background.jpg", "JPEG")
        time.sleep(2) #set interval here
        imgBGR = cv2.imread("background.jpg")
        imgGray = cv2.cvtColor(imgBGR, cv2.COLOR_BGR2GRAY)

        template = cv2.imread("template.png", 0)
        width, height = template.shape[::-1]

        res = cv2.matchTemplate(imgGray, template, cv2.TM_CCOEFF_NORMED)
        threshold = 0.99
        loc = np.where(res >= threshold)

        for pt in zip(*loc[::-1]):
            print(pt)

        pyautogui.click(pt[0]+width/2, pt[1]+height/2)

def on_press(key):
              if any([key in COMBO for COMBO in COMBINATIONS]):
                     current.add(key)
                     if any(all(k in current for k in COMBO) for COMBO in COMBINATIONS):
                         global isRunning
                         isRunning = not isRunning
                         print(isRunning)
                         while(isRunning):
                             templateMatch()                            

def on_release(key):
           if any([key in COMBO for COMBO in COMBINATIONS]):
               current.remove(key)

with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
           listener.join()
...