【问题标题】:[Python][evdev] Get cursor position after mouse click[Python][evdev] 鼠标点击后获取光标位置
【发布时间】:2013-08-02 12:28:27
【问题描述】:

我有一个问题,我需要捕获来自鼠标的所有事件。浏览网页后,我阅读了有关 evdev 模块的信息并尝试了一下。

我现在有一个脚本,我可以在其中从鼠标中获取所有事件,以防止与其他窗口的其他交互(在我最初的问题中很重要)。 有了它,我可以在单击按钮和鼠标移动时读取事件。但是我没有找到单击按钮时如何获取光标位置。

#!/usr/bin/env python
# -*- coding: utf8 -*-

from evdev import InputDevice, categorize, ecodes
from os import listdir
from os.path import isfile, isdir, exists, join

def my_list():
    print('*** my_list(): begin.')
    devices = map(InputDevice, list_devices())
    for dev in devices:
        print('%-20s %-32s %s' % (dev.fn, dev.name, dev.phys))
        print('*** my_list(): end.')

def monitor_device(dev):
    for event in dev.read_loop():
        if event.type == ecodes.EV_KEY:
            print(categorize(event))
            print(event)

if __name__ == "__main__" :
    dev_path = '/dev/input/event17'
    if(exists(dev_path)):
        device = InputDevice(dev_path)
        try:
            device.grab()
            monitor_device(device)
        except KeyboardInterrupt :
            device.ungrab()
            print('User aborted the program.')

我怎样才能用 evdev 做到这一点?如果我不能,还有其他方法吗?

任何帮助将不胜感激。 :)

【问题讨论】:

  • 您正在从硬件读取原始事件流。任何地方都没有坐标。如果你需要知道你的窗口系统指针在哪里,你需要和你的窗口系统对话,而不是硬件。您不是在向您的 SATA 控制器询问文件和文件夹,是吗?
  • 我明白你在说什么。那么,有没有办法让我的程序唯一获得鼠标点击,并询问窗口系统此时光标的位置?
  • 您可以这样做,但为了统一起见,您可能需要向 X11 询问有关点击次数和坐标的信息。

标签: python linux mouseevent evdev


【解决方案1】:

您可以监听 ABS_MT_POSITION_X 和 ABS_MT_POSITION_Y 事件,并将值存储在 x、y 变量中。然后,当您收到 BTN_TOUCH 事件时,您就知道位置是什么了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多