Chyba się domyślam o co Tobie chodzi, że w trakcie działania tego fragmentu kodu
pyautogui.moveTo(100, 100, duration=4)
time.sleep(3)
jeżeli kursor "wyjdzie" poza okno, w którym wykonuje się kod python-a, nie działa "obsługa" zdarzeń dla
if keyboard.is_pressed("a"):
dzieje się tak, ponieważ
import keyboard
nie "obsługuje tzw. nasłuchiwania" poza oknem aktywnym gdzie działa kod python-a.
Spróbuj użyć: pynput (który m. in. "potrafi" obsługiwać zdarzenia, nawet gdy kursor jest poza oknem)
from pynput import keyboard
no i
time.sleep(...)
powoduje zatrzymanie wykonywania kodu, w przykładzie posłużyłem się time.time(), żeby dodać opóźnienie między kolejnymi ruchami myszki, ale bez zatrzymywania pętli while, ale spróbuj też zapoznać się z: How to Add Time Delays to Your Code.
przykład
import pyautogui
from pynput import keyboard
from time import time, sleep
def on_press(key):
if key == keyboard.Key.esc:
# Wykryto wciśnięcie klawisza 'esc'
return False # Zakończ nasłuchiwanie
# Utworzenie obiektu nasłuchującego
listener = keyboard.Listener(on_press=on_press)
# Rozpoczęcie nasłuchiwania
listener.start()
move_duration = 1
move_interval = 3
start_time = time()
pyautogui.moveTo(100, 100, duration=move_duration)
step = 2
while True:
if time() - start_time > move_interval and step == 1:
pyautogui.moveTo(100, 100, duration=move_duration)
start_time = time()
step = 2
if time() - start_time > move_interval / 2 and step == 2:
pyautogui.moveTo(50, 50, duration=move_duration)
start_time = time()
step = 1
if not listener.is_alive():
print("Wciśnięto klawisz 'esc'.")
sleep(3)
break
# Oczekiwanie na zakończenie nasłuchiwania
listener.join()
exit()
BTW, za pomocą pynput też możesz m. in. "sterować" kursorem myszki, więc można ewentualnie zrezygnować z u użycia pyautogui.