Python鼠标.侦听器和键盘.侦听器事件触发两次

2024-04-26 00:27:21 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  • 记录鼠标点击和滚动
  • 记录任何按键

我遇到的问题是,一次鼠标点击/滚动和按键注册两次。 有了Javascript,我想您可以通过使用preventDefault()来阻止这种情况,但我不知道python如何解决这个问题

以下输出行表示单击一次:

time/button/x/y/pressed
(17:52:08.509538): click:Button.left:587:1266:True:
(17:52:08.510471): click: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, x, y, dx, dy):
    print('scroll:' + str(x) + ':' + str(y) + ':' + str(dx) + ':' + str(dy) + ':')
    self.log_input('scroll:' + str(x) + ':' + str(y) + ':' + str(dx) + ':' + str(dy) + ':')  

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


Tags: keyselfloginputondefbutton鼠标
1条回答
网友
1楼 · 发布于 2024-04-26 00:27:21

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

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

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

在我自己的程序中使用单独的方法是可行的

相关问题 更多 >