鼠标侦听器 on_move 事件
Mouse Listener on_move event
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 called" 并且当我按下 [=20 时程序按预期终止=]键。
谁能告诉我原因并告诉我这有什么问题。提前致谢。
当您在光标位置改变时触发的回调中移动光标位置时,您已经创建了一个调用 .position
的递归。
我想您可以通过调用
来获得预期的行为
pynput.mouse.Controller().position = (0,0)
应用程序启动并通过以下方式阻止事件传播:
mouli = pynput.mouse.Listener(on_move=poschange, suppress=True)
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 called" 并且当我按下 [=20 时程序按预期终止=]键。
谁能告诉我原因并告诉我这有什么问题。提前致谢。
当您在光标位置改变时触发的回调中移动光标位置时,您已经创建了一个调用 .position
的递归。
我想您可以通过调用
来获得预期的行为pynput.mouse.Controller().position = (0,0)
应用程序启动并通过以下方式阻止事件传播:
mouli = pynput.mouse.Listener(on_move=poschange, suppress=True)