Почему, если суждение в слушателе мыши PYNPUT будет работать дважды? - PullRequest
0 голосов
/ 09 июля 2019

Я хочу использовать прослушиватель мыши в модуле Pynput для мониторинга события щелчка. Муравей в соответствии со статусом события запускает одну функцию. Но, похоже, что-то не так со статусом события.

    from pynput.keyboard import Controller, Key, Listener
    from pynput import mouse
    from pynput import keyboard
    import pythoncom
    from ctypes import *


    flag = False
    def on_right_click(x, y, button, pressed):
            global flag
            # boolFlag = False
            button_name = ''
            if button == mouse.Button.right:
                    user32 = windll.LoadLibrary('user32.dll')
                    if flag == True:
                            user32.BlockInput(False)
                            flag = False
                    else:
                            user32.BlockInput(True)
                            flag = True
                    print(flag)
                    button_name = 'Right Button'
            elif button == mouse.Button.left:
                    button_name = 'Left Button'
            if pressed:
                    print('{0} is pressed at {1}, {2}'.format(button_name, x, y))
            if not pressed:
                    return False

    while True:
            with mouse.Listener(on_click=on_right_click) as listener:
                    listener.join()

Обычно флаг изменяется один раз и вызывает функцию BlockInput, но ниже приведены реальные результаты:

    True
    Right Button is pressed at 3478, 303
    False

Итак, почему флаг меняется дважды?

1 Ответ

0 голосов
/ 09 июля 2019

Система создает два события

  • один, когда вы начинаете нажимать кнопку - обычно вызывается "press"
  • один, когда вы перестаете нажимать кнопку - обычно вызывается "release".

В других программах "click" запускается только с одним событием (я не уверен, но это может быть "release"), но здесь слушатель запускает одну и ту же функцию для обоих событий. Наконец, вы можете увидеть два сообщения.

Но для клавиатуры слушатель использует отдельный метод для press и release.

Оба события мыши используются для перетаскивания / перемещения элементов на экране.

...