Не удается остановить, потому что вы находитесь в бесконечном цикле, когда вы делаете это:
while key is not Key.enter:
из-за того, что on_press не может быть вызван снова, и поэтому переменная key никогда не изменится.
from pynput.keyboard import Key, Controller, Listener
import time
import pyautogui as pg
import threading
pg.FAILSAFE = True
kb = Controller()
time.sleep(1)
threadExitFlag = threading.Event()
threadVar = None
def mouse_move_thread(threadExitFlag):
pg.position(500, 500)
x = 20
while not threadExitFlag.is_set():
pg.moveRel(x, 0, duration=0.2)
time.sleep(1)
def on_press(key):
global threadExitFlag
if key == Key.space:
threadVar = threading.Thread(target=mouse_move_thread, args=[threadExitFlag]).start()
if key == Key.enter:
threadExitFlag.set()
#Turns this macro back on
elif key == Key.esc:
if threadExitFlag.is_set():
threadExitFlag.clear()
with Listener(on_press=on_press) as listener:
listener.join()
Чтобы использовать это, вы нажимаете пробел, чтобы начать движение мыши, затем вы можете остановить его, нажав ввод. После этого вам нужно нажать клавишу esc , чтобы сбросить событие, которое останавливает его, что означает, что для выполнения этого макроса дважды подряд необходимо нажать:
space (start the macro)
enter (stop/kill the macro)
esc (reset flag, if you press space after this you can start the macro again)
Я проверил это, и он работает на 100%.