2017-01-09 96 views
1

如何在使用Xlib的python应用程序中为根窗口(或任何其他窗口)设置光标?Python xlib更改光标

我有一个displaywindow(根窗口)的实例。 使用C绑定;我可以用我用XCreatePixmapCursor创建的游标使用XDefineCursor。我如何做与python绑定相同的?

我希望能够使用默认光标或自定义光标。

回答

0

有你要记住,当你需要找到的python-Xlib的任何等价的libx11功能的两件事情:

  1. 的libx11不同,蟒蛇,Xlib的是面向对象的;在这种情况下,XCreatePixmapCursor()转换为pixmap.create_cursor()
  2. 大多数python-xlib方法直接映射到X11消息,即。大部分帮手功能都没有实现;如果找不到匹配的python-xlib方法,那么通常需要查看libX11 source code以确定该函数是否只是一个帮助程序,用于调用其他函数。在这种情况下,如果你看看source code of XDefineCursor(),你会发现它实际上是调用XChangeWindowAttributes(),这意味着你想在python-xlib中使用win.change_attributes()

如果你想使用XCreateFontCursor()使用光标光标字体,第二条准又适用:它调用的引擎盖,这相当于font.create_glyph_cursor()XCreateGlyphCursor()

把所有的一起,这里就是你会得到什么:

# Create font cursor 
font = display.open_font('cursor') 
cursor = font.create_glyph_cursor(font, Xlib.Xcursorfont.crosshair, Xlib.Xcursorfont.crosshair+1, (65535, 65535, 65535), (0, 0, 0)) 


# Use PIL to load a cursor image and ensure that it's 1-bit as required 
im = Image.open('cursor.png').convert('1') 
w, h = im.size 

# Create pixmap cursor 
mask = win.create_pixmap(w, h, 1) 
gc = mask.create_gc(foreground=0, background=1) 
mask.put_pil_image(gc, 0, 0, im) 
cursor = mask.create_cursor(mask, (0, 0, 0), (65535, 65535, 65535), 0, 0) 


# Change cursors for given windows 
win.change_attributes(cursor=cursor) 

如果你想知道关于+1的呼叫的意义font.create_glyph_cursor(),这是在source code of XCreateFontCursor()解释。