Python xlib更改游标

时间:2017-01-09 18:38:21

标签: python pointers cursor xlib

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

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

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

1 个答案:

答案 0 :(得分:0)

当您需要找到与任何libX11函数等效的python-xlib时,您需要记住两件事:

  1. 与libX11不同,python-xlib是面向对象的;在这种情况下,XCreatePixmapCursor()会转换为pixmap.create_cursor()
  2. 大多数python-xlib方法直接映射到X11消息,即。大多数辅助功能都没有实现;如果你找不到匹配的python-xlib方法,那么你经常要查看libX11 source code以确定该函数是否只是一个调用其他函数的帮助器。在这种情况下,如果您查看source code of XDefineCursor(),您会看到它实际上正在调用XChangeWindowAttributes(),这意味着您将要在python中使用win.change_attributes() -xlib。
  3. 如果您想使用XCreateFontCursor()来使用光标字体中的光标,则第二条准则会再次适用:它在引擎盖下调用XCreateGlyphCursor(),对应{{1} }。

    把所有这些放在一起,这是你得到的:

    font.create_glyph_cursor()

    如果您对# 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的重要性感到疑惑,请在source code of XCreateFontCursor()中说明。