我正在尝试在我的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
如果您对此错误或其他方式有任何想法,那么它真的有用!
答案 0 :(得分:0)
BadAccess
这是因为“尝试选择一个事件类型,只有一个客户端可以在另一个客户端已经选择它时选择它。”
从x11 protocol documentation,ChangeWindowAttributes请求(操作码2是此请求代码,资源ID = 146是您的根赢取ID):
多个客户端可以在同一窗口中选择输入;其 事件掩码是不相交的。生成事件时,它将是 报告给所有感兴趣的客户。但是,一次只能有一个客户端 可以选择SubstructureRedirect,一次只能有一个客户端 选择ResizeRedirect,一次只能选择一个客户端 对于ButtonPress。试图违反这些限制会导致 访问错误。
尝试仅选择ButtonReleaseMask
作为可能的解决方案