В настоящее время я застрял в программе, которую пишу на 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()