加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

通过Python中的Xlib找出鼠标按钮状态

发布时间:2020-12-17 17:38:52 所属栏目:Python 来源:网络整理
导读:我可以通过以下方式确定当前鼠标指针的位置: from Xlib.display import Displaydisplay = Display()qp = display.screen().root.query_pointer()print(qp.root_x,qp.root_y) 我如何也可以通过Xlib获得当前鼠标按钮的状态,例如按下/释放左/右按钮? (或者,如

我可以通过以下方式确定当前鼠标指针的位置:

from Xlib.display import Display
display = Display()
qp = display.screen().root.query_pointer()
print(qp.root_x,qp.root_y)

我如何也可以通过Xlib获得当前鼠标按钮的状态,例如按下/释放左/右按钮? (或者,如果不可能,为什么不呢?)

最佳答案
您的X窗口必须支持XInput扩展. Real X可以使用,但是如果X服务器不支持VNC服务器等扩展名,则无法使用鼠标键.

如果X服务器支持它,则可以进入鼠标状态,如下所示:

from Xlib.display import Display
from Xlib.ext import xinput

display = Display()

import time

while True:
    buttons = []

    for device_info in display.xinput_query_device(xinput.AllDevices).devices:
        if not device_info.enabled:
            continue
        if xinput.ButtonClass not in [ device_class.type for device_class in device_info.classes ]:
            continue
        buttons.append(device_info)

    for button in buttons:
        for device_class in button.classes:
            if xinput.ButtonClass == device_class.type:
                if device_class.state[0]:
                    print('Device {name} - Primary button down'.format(name=button.name))
    time.sleep(1)

我不确定百分百找不到文档,但是我确定device_class.state [0]是主要的(左键),1是中间的,2是右键.

您可能会发现the button number assignment spec here

编辑:

为什么有两个for循环-首先,我在永远循环之外编写了“ buttons”部分.但是,“嘿,您可以随时插入鼠标.”

您会发现,有许多设备包括“虚拟”设备.在笔记本电脑上,触摸板也可以用作按钮,因此在您的应用中,如果您想了解真正的鼠标按钮,则可能必须从名称中选择设备.同样,没有好的文档,因此您可能必须解密设备类对象.您可以在/usr/lib/python3/dist-packages/Xlib/ext/xinput.py中找到xinput. (如果您使用的是Python2,请相应地进行调整.)祝您好运.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读