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”键时程序会按预期终止
有人可以告诉我原因,然后告诉我这怎么了。预先感谢。
答案 0 :(得分:1)
您已经创建了一个对.position
的调用的递归,当您在光标更改其位置时触发的回调中移动光标位置时。
我想您可能会通过调用
来获得预期的行为pynput.mouse.Controller().position = (0,0)
在应用程序启动时并通过防止事件传播:
mouli = pynput.mouse.Listener(on_move=poschange, suppress=True)