python - 在 Python 鼠标模块中使用回调(检索事件类型)

标签 python callback mouse

我正在使用 Python 模块“Mouse”来捕获鼠标输入(更具体地说,是鼠标坐标、输入按钮和输入类型)。 来源:https://github.com/boppreh/mouse

查看 on_button() 和 on_click() 的源代码,我不确定如何将“鼠标按钮按下”和“鼠标按钮向上”的 event_type 传递回我的代码:

def left_mouse():
    print('LEFT ', mouse.get_position())
    # I want to get the [mouse button, example: left] and [type, example: up] from the logging

mouse.on_click(left_mouse)

来自鼠标模块的源代码:on_button 和 on_click;我猜我没有正确调用回调,但无法弄清楚什么是正确的方法:

def on_button(callback, args=(), buttons=(LEFT, MIDDLE, RIGHT, X, X2), types=(UP, DOWN, DOUBLE)):
    """ Invokes `callback` with `args` when the specified event happens. """
    if not isinstance(buttons, (tuple, list)):
        buttons = (buttons,)
    if not isinstance(types, (tuple, list)):
        types = (types,)

    def handler(event):
        if isinstance(event, ButtonEvent):
            if event.event_type in types and event.button in buttons:
                callback(*args)
    _listener.add_handler(handler)
    return handler

def on_click(callback, args=()):
    """ Invokes `callback` with `args` when the left button is clicked. """
    return on_button(callback, args, [LEFT], [UP])

一如既往地感谢。

最佳答案

因此,根据上面的评论,您很难检索事件是“向上”还是“向下”。
本质上,不需要将此信息传递给您,因为您正在使用的此函数有一项特定的工作。 event_up (在我的评论中,我说它是鼠标按下,但它始终向上)并且始终是“鼠标左键”。这意味着,无需向您提供此信息 - 因为您正在使用的库函数 on_click() 是一条单向街道,没有任何可变结果。

您可以通过执行代码并按住鼠标左键来尝试此操作,在释放按钮之前不会发生任何事情。这就是 left+up 触发的时候 - 这是 on_click() 可以得出的唯一结果。

您遇到的问题可能是您正在尝试附加函数 left_mouse() 来处理所有鼠标事件?

通常,您将为每个事件附加一个唯一的函数 - 就像您在代码中使用 left_mouse() 一样。但如果您出于某种原因需要合并它们,则可以这样做:

def mouse(event):
    print('Position:', mouse.get_position())
    print('Event:', event)

mouse.on_click(left_mouse, args=('mouse_left', 'mouse_up'))
mouse.on_righ_click(left_mouse, args=('mouse_right', 'mouse_up'))

但同样,如果您想将一个函数与预定义的库函数结合使用以实现不同的鼠标操作。

您可能感兴趣的是mouse.ButtonEvent类。该事件具有触发器和附加信息。但是要获取此事件/对象,您需要 Hook 并让库知道您想要负责每个事件。这意味着您不能使用预构建的函数left-mouse-release等,您需要构建自己的事件处理程序。您可以通过调用 mouse.hook 以及您想要在每个鼠标事件上调用的函数来完成此操作。

例如:

import mouse
import time

events = []
mouse.hook(events.append)
while 1:
    mouse._listener.queue.join()
    for event in events:
        print(event)
    del events[:]
    time.sleep(0.25)

您注册了函数events.append(常规列表追加函数),以便在每次鼠标移动时调用。 (您也可以将其替换为您自己的函数,并直接在函数中处理事件,就像您尝试做的那样)

从那里,您可以访问每个“帧”或鼠标事件并执行相应的操作。

所有这些都可以在图书馆自己的 test cases 中找到关于他们如何测试每个功能。
这一切都不是您要寻找的第一件事,而且在“如何开始”方面也没有记录。

关于python - 在 Python 鼠标模块中使用回调(检索事件类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53142099/

相关文章:

javascript - 使用 python-shell 在 Node 和 Python 之间传递数据,在 win 7 上出现错误

python - 运行python脚本时自动导入模块?

javascript - 异步 JavaScript 解决方法

javascript - 多个查询的 Node MySql 回调

javascript - 将 jQuery 回调函数保存在单独的文件中

Java 键盘/鼠标 Activity (甚至在我的应用程序之外)

python - mpmath 矩阵求逆的替代方案或加速

c++ - 如何区分opencv中RGB led的HSV颜色?

python - 使用 Python 获取鼠标增量! (在 Linux 中)

python - 在 Python 中,如果给出错误的参数,则返回 “None” 而不是创建新实例