鼠标侦听器on_move事件

时间:2019-10-23 20:30:20

标签: python python-3.x listener pynput

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),直到我按键盘上的'a'键,然后程序终止并再次控制我的鼠标。 据我在这段代码中所知,每当我移动鼠标时,都会调用poschange()方法,并且必须将鼠标位置设置回(0,0)并再次重复直到鼠标侦听器线程终止,但是它可以正常工作两次,poschange()函数中的print语句在控制台中被两次打印,然后鼠标变慢并缓慢移动,当我按'a'时,侦听器必须停止并且程序必须终止,但是我没有手动进行操作,只有鼠标再次快速又正常。但是,当我从代码中删除行pynput.mouse.Controller().position = (0,0)时,事情按预期工作,每次我移动鼠标时,它都会打印打印语句“ poschange named”,并且按“ a”键时程序会按预期终止

有人可以告诉我原因,然后告诉我这怎么了。预先感谢。

1 个答案:

答案 0 :(得分:1)

您已经创建了一个对.position的调用的递归,当您在光标更改其位置时触发的回调中移动光标位置时。

我想您可能会通过调用

来获得预期的行为
pynput.mouse.Controller().position = (0,0)

在应用程序启动时并通过防止事件传播:

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