为什么PYNPUT鼠标侦听器中的IF判断将被操作两次?

时间:2019-07-09 03:34:50

标签: python pynput

我想在Pynput模块中使用鼠标侦听器来监视click事件。蚂蚁会根据事件状态,触发一个功能。但是事件状态似乎有问题。

    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()

通常,Flag会更改一次,并会触发BlockInput函数,但实际结果如下:

    True
    Right Button is pressed at 3478, 303
    False

那么,为什么将标志更改两次?

1 个答案:

答案 0 :(得分:0)

系统创建两个事件

  • 一个当您开始按下按钮时-统称为"press"
  • 一个当您停止按下按钮时-统称为"release"

在其他程序中,"click"仅在一个事件中运行(我不确定,但可以是"release"),但是此处,侦听器对两个事件运行相同的功能。所以最后您可以看到两条消息。

但是对于键盘的侦听器,pressrelease使用分开的方法。

两个鼠标事件均用于在屏幕上拖动/移动元素。