Событие прослушивания мыши on_move - PullRequest
1 голос
/ 23 октября 2019
import pynput
import time

def poschange(x,y):
    #print(f"{x},{y}")
    print("poschange called")
    pynput.mouse.Controller().position = (0,0)

def stop(key):
        #print(key)
        try:
            if key.char == 'a':
                print("stopped")
                keyli.stop()
                mouli.stop()
                exit()
        except:
            pass

keyli = pynput.keyboard.Listener(on_press = stop)
keyli.start()
mouli = pynput.mouse.Listener(on_move = poschange)
mouli.start()
keyli.join()
mouli.join()

Я просто хочу заблокировать положение мыши, когда мышь на (0,0), пока я не нажму клавишу «а» на клавиатуре, а затем программа завершится, и я снова получу управление своей мышью. Насколько мне известно в этом коде, когда я перемещаю мышь, вызывается метод poschange(), и положение мыши должно быть установлено обратно в (0,0) и повторяться до тех пор, пока поток слушателя мыши не прекратится, но он просто работает дважды,оператор print в функции poschange() дважды печатается в консоли, а затем мышь становится вялой и движется медленно, когда я нажимаю «a», слушатели должны остановиться и программа должна завершиться, но это не нужно делать вручную. и только мышь снова становится быстрой и нормальной. Но когда я удаляю строку pynput.mouse.Controller().position = (0,0) из кода, эта вещь работает так, как я намереваюсь, она печатает оператор print «poschange named» каждый раз, когда я перемещаю мышь, и программа завершается, как и ожидалось, когда я нажимаю клавишу «a».

Может кто-нибудь, пожалуйста, скажите мне, почему и скажите, что с этим не так. Заранее спасибо.

1 Ответ

1 голос
/ 23 октября 2019

Вы создали рекурсию с этим вызовом на .position, когда вы перемещаете позицию курсора в обратном вызове, который срабатывает, когда курсор меняет свою позицию.

Я полагаю, вы можете получить ожидаемое поведение, вызвав этот

pynput.mouse.Controller().position = (0,0)

при запуске приложения и путем предотвращения распространения события с помощью:

mouli = pynput.mouse.Listener(on_move=poschange, suppress=True)
...