在Python中捕获鼠标点击
我在我的Python代码中想要捕捉鼠标点击事件(不仅仅是在我创建的Gtk
窗口中,而是在屏幕上的任何地方)。经过一番搜索,我发现了一个讨论xlib
的帖子(太好了,我已经有这个依赖了)。
from Xlib import display, X
display = display.Display()
root = display.screen().root
root.change_attribute(event_mask = X.ButtonPressMask | X.ButtonReleaseMask)
while True:
event = root.display.next_event()
print(event)
问题是这段代码出现了错误,我就是找不到好的文档来解决这个问题……
X protocol error:
<class 'Xlib.error.BadAccess'>: code = 10, resource_id = 146, sequence_number = 9, major_opcode = 2, minor_opcode = 0
如果你对这个错误有什么想法,或者有其他方法可以做到这一点,那就太好了!
1 个回答
0
这里提到的BadAccess
错误是因为“你试图选择一个事件类型,但这个事件类型一次只能被一个客户端选择,而此时已经有其他客户端选择了它。”
根据x11协议文档,在ChangeWindowAttributes请求中(请求代码是2,资源ID=146是你的根窗口ID):
多个客户端可以在同一个窗口上选择输入,它们的事件掩码是互不干扰的。当一个事件发生时,会通知所有感兴趣的客户端。然而,只有一个客户端可以同时选择SubstructureRedirect,只有一个客户端可以同时选择ResizeRedirect,只有一个客户端可以同时选择ButtonPress。如果试图违反这些限制,就会出现访问错误。
尝试只选择ButtonReleaseMask
作为可能的解决方案。