如何解决Time.Sleep 替代方案和如果 Keyboard.is_pressed 替代方案?需要能够中断循环/返回主
import time
import pyautogui
from pyautogui import *
import keyboard
from PIL import ImageGrab,Image
from PIL import *
import os
import win32api,win32con
import cv2
import pyperclip
from pynput.keyboard import Key,Listener
import PyTesseract
import numpy as np
from numpy import *
from threading import Event
##1340,182,1777,213
test = 0
src_path = os.getcwd()
PyTesseract.PyTesseract.tesseract_cmd = r'C:\\Program Files\\Tesseract-OCR\\tesseract'
def get_region(Box):
im = ImageGrab.grab(Box)
im = im.save(os.getcwd() + "\\logs.png",'PNG')
def get_string(img_path):
img = cv2.imread(img_path)
kernel = np.ones((1,1),np.uint8)
img = cv2.dilate(img,kernel,iterations=1)
img = cv2.erode(img,iterations=1)
red = [0,255]
img[img != red] = 255
cv2.imwrite(src_path + "\\logs.png",img)
result = PyTesseract.image_to_string(Image.open(src_path + "\\logs.png"))
return result
def alertf1(c):
global test
time.sleep(0.1)
while c == 1:
if keyboard.is_pressed('f1'): # if key 'f1' is pressed
print('f1 has been pressed')
c = 0
break
else:
result = get_string(src_path + "\\logs.png")
print('checking if anything is destroyed')
if result.find('destroved') != -1:
print('something got destroyed!')
pyautogui.keyDown('ctrl')
time.sleep(0.1)
pyautogui.keyDown('tab')
pyautogui.keyUp('ctrl')
pyautogui.keyUp('tab')
time.sleep(0.5)
for char in '@':
pyperclip.copy(char)
pyautogui.hotkey('ctrl','v',interval=0.1)
pyautogui.write('everyone Enemies/Red Logs! Something has been destroyed.')
pyautogui.press('enter')
pyautogui.click(x=1860,y=50)
else:
if keyboard.is_pressed('f1'): # if key 'f1' is pressed
print('f1 has been pressed')
c = 0
break
def on_press(key):
global test
test = test + 1
region = (1341,185,1778,215)
get_region(region)
if key == Key.f1 and test == 1:
print('before alert f1 pressed')
test = test + 1
time.sleep(0.1)
alertf1(1)
if key == Key.f1 and test == 3:
test = 0
with Listener(on_press=on_press) as listener:
listener.join()
def main():
while True:
print('on press going Now')
on_press(key)
if __name__ == '__main__':
main()
我的代码目前有 2 个问题,我将首先解释它的作用和我想要的:
开始时,如果用户按“F1”,它将截取一小块区域并将图像转换为文本,然后运行无限循环,以检查我从图像中获得的文本是否为 = 到 '如果是,则用户会收到通知,如果不是,则会无限循环获取新的屏幕截图并再次检查。
我还添加了“if keyboard.is_pressed('f1'):”来打破无限循环。
我现在遇到的两个问题:
1- 用户收到通知后,我希望程序不要进入无限循环 5 分钟,time.sleep (300) 有效,但问题是如果用户想取消当前功能并按 F1 中断循环回到 Main() 它不会被检测到,因此我需要另一个 time.sleep 替代方法,因为它只是完全冻结代码。我听说 threading.event 可以工作,但老实说我不知道它是如何工作的,即使在检查了几个例子之后,我也不知道如何让它仍然工作。
2- 我发现 'if keyboard.is_pressed('f1'):' 不是很有效,因为它有时不会触发并且必须多次点击直到它触发并中断循环。什么是好的选择?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。