Прекратите выполнение функции после того, как будет отпущена клавиша мыши

#python #pynput

Вопрос:

У меня есть функция, которая запускается при нажатии клавиши мыши. Я хотел бы отменить его, как только он будет выпущен. Как бы я это сделал, используя pynput ? Для некоторой помощи, вот код, который я использовал для этого, но он не работает, так как ожидает завершения on_click функции, или это мое предположение.

 running = False
i = 0
f = 4
delta_x = [1,2,3]
delta_y = [3,2,1]

def wasd(l):
    global f
    f = f   l
    print(f)
    if (f == 5):
        return True
    else:
        return False

def logging_mouse(running, i):
    while (running and i < len(delta_x)):
      print(delta_x[i],delta_y[i])
       if wasd(0) == True: break
       i = i 1
    running = False

def on_click(*args):
    global running
    global i
    print(running)
    i = args[3]
    if args[-1]:
        if not running:
            running = True
            threading.Thread(target=logging_mouse(running,i)).start()
    else:
        running = False
        wasd(1)
        f = 4
        i = 0

with Listener(on_release=wasd(1),on_click=lambda event1,event2,event3,event4: on_click(event1,event2,event3,i,event4)) as listener:
        listener.join()
 

Комментарии:

1. reddit.com/r/learnpython/comments/8y0p3j/… *os447q cid YW1wLXVxVndodm9NZ2E2WlJDLUNwSDFqVlE. Это помогает

Ответ №1:

 while True:
    def on_press_start(*args):
        if args[-1]:
           return False

    def on_press_loop(*args):
        if not args[-1]:
            return False

    i = 0
    with Listener(on_click=on_press_start) as listener:
        listener.join()

    with Listener(on_click=on_press_loop) as listener:
        for i in range(len(delta_x)):
           print(delta_x[i],delta_y[i])
            if not listener.running:
                break
            print(i)