python - 鼠标监听 on_move 事件
问题描述
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()
函数中在控制台中打印了两次,然后鼠标变得迟缓并且移动缓慢,当我按下“a”时,听众必须停止并且程序必须终止,但我不必手动执行它,只有鼠标变成又快又正常了。但是当我删除线pynput.mouse.Controller().position = (0,0)
从代码中事情按我的意图工作,每次我移动鼠标时它都会打印打印语句“poschange called”,当我按下“a”键时程序会按预期终止。
有人可以告诉我为什么并告诉我这有什么问题吗?提前致谢。
解决方案
.position
当您在光标更改其位置时触发的回调中移动光标位置时,您已经使用该调用创建了一个递归。
我想你可能会通过调用它来获得预期的行为
pynput.mouse.Controller().position = (0,0)
在应用程序启动时并通过以下方式阻止事件传播:
mouli = pynput.mouse.Listener(on_move=poschange, suppress=True)
推荐阅读
- javascript - Ajax XHR 返回 500 错误,但 PHP 文件有效
- php - 可变数量参数的 PHP 代码
- java - selenium webdriver中的Java else if语句-否定测试
- bluetooth - iOS Core蓝牙外设扫描问题:如何区分多个设备同时广告
- javascript - 根据 XML 属性的值更改图像
- api - 我们可以使用 Github API 来确定 Github 用户是否是机器人吗?
- pandas - 如何在一个月的最后一周添加 1 并在 pandas 数据框中填充为 0?
- r - r 多列减法
- java - Gradle 项目的简单版本控制
- jquery - JQuery在每行中创建动态对象数组