微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python mouse.Listener和keyboard.Listener事件触发两次

如何解决Python mouse.Listener和keyboard.Listener事件触发两次

我想在玩游戏时收集数据,以便以后可以学习算法。 为此,我需要一个按键和鼠标记录器,该记录器需要:

  • 记录鼠标的点击和滚动
  • 记录所有按键。

我遇到的问题是一次鼠标单击/滚动和按键被注册两次。 我以为使用Javascript,您可以通过使用preventDefault()来阻止此问题,但我不知道此问题的python解决方案。

以下输出行代表一键:

时间/按钮/ x / y /按下
(17:52:08.509538):单击:按钮。左:587:1266:真:
(17:52:08.510471):单击: Button.left:587:1266:True:

我宁愿不检查当前触发器与最后一个触发器之间的时差,除非没有其他选择,但我无法想象是这种情况。

我对听众的定义如下:

with keyboard.Listener(on_press=self.on_press) as k_listener,mouse.Listener(on_click=self.on_click,on_scroll=self.on_scroll) as m_listener:
        k_listener.join()
        m_listener.join()

on_press,on_click和on_scroll方法如下:

def on_press(self,key):
    print(str(key))
    self.log_input(str(key))

def on_click(self,x,y,button,pressed):
    if pressed:
        print('click:' + str(button) + ':' + str(x) + ':' + str(y) + ':' + str(pressed) + ':')
        self.log_input('click:' + str(button) + ':' + str(x) + ':' + str(y) + ':' + str(pressed) + ':')
    else:
        pass

def on_scroll(self,dx,dy):
    print('scroll:' + str(x) + ':' + str(y) + ':' + str(dx) + ':' + str(dy) + ':')
    self.log_input('scroll:' + str(x) + ':' + str(y) + ':' + str(dx) + ':' + str(dy) + ':')  

我只想让这些方法触发一次,而不是两次。

解决方法

我似乎无法重现您的问题,但这可能是由您的 log_input 引起的。我建议通过单独定义的函数记录您的输入,该函数可以附加到列表或文本文件中。这是一个仅使用按键事件的简化版本。

def log_input(input):
    global Log
    Log.append(input)

def on_press(key):
    print(str(key))
    log_input(str(key))

在我自己的程序中使用单独的方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。