我可以通过以下方式确定当前鼠标指针的位置:
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 server支持,那么你可以通过如下方式进入鼠标状态:
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)
我不是 100% 确定,因为在任何地方都找不到文档,但我很确定 device_class.state[0] 是主要的(左键),1 是中间的,2 是右键的。
你大概可以找到the button number assignment spec here
编辑:
为什么有两个 for 循环 - 首先我在 forever 循环之外写了“按钮”部分。但是,“嘿,你可以随时插入鼠标。”
您会发现,有很多设备,包括“虚拟”设备。在笔记本电脑上,触摸板也可以用作按钮,因此在您的应用程序中,如果您想知道真正的鼠标按钮,您可能需要从名称中选择一个设备。同样,没有好的文档,因此您可能必须破译设备类对象。您可以在/usr/lib/python3/dist-packages/Xlib/ext/xinput.py 中找到 xinput。 (如果您使用的是 Python2,请相应地进行调整。)祝您好运。
关于python - 在 Python 中通过 Xlib 找出鼠标按钮状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54992964/