2014-03-29 79 views
1

我试图在我的python代码中捕获鼠标单击事件(不仅仅是在我创建的Gtk窗口中单击,而是在屏幕中的任意位置单击)。经过一番搜索之后,我发现一条线索在谈论xlib(伟大的,我已经拥有的依赖)。在python中捕获鼠标单击

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

BadAccess这里是因为“试图选择一个事件类型,只有一个客户端可以在另一个客户端已经选择它时选择它”。

x11 protocol documentation,ChangeWindowAttributes请求(操作码2是这个请求的代码,资源ID = 146是你的根赢ID):

多个客户端可以选择在同一窗口中输入;他们的 事件掩码是不相交的。当一个事件产生时,将向所有感兴趣的客户报告 。但是,只有一个时间为 的客户端可以选择SubstructureRedirect,一次只有一个客户端可以选择ResizeRedirect,并且一次只有一个客户端可以为ButtonPress选择 。试图违反这些限制会导致 出现访问错误。

尽量选择ButtonReleaseMask只是作为一个可能的解决方案

+0

谢谢,这实际上是解决误差问题(和你的链接在我的书签,现在)。但我仍然可以捕捉鼠标按下/释放事件... – Paulloz