如何在Linux下跟踪python中的光标图像

如何在Linux下跟踪python中的光标图像,python,linux,cursor,xlib,Python,Linux,Cursor,Xlib,我想做的是跟踪屏幕上显示的光标图像,特别是当它因为我进出活动区域而改变时。有很多模块可以跟踪光标的位置,但是光标图像上的信息非常有限 我发现一篇帖子提到,对于使用win32gui的windows: 但是,在linux下,有没有一种方法可以使用Xlib实现这一点呢?我进一步发现,XFixes显然有一个名为XFixesGetCursorImage的方法,它没有直接暴露于python,但它也有好几年的历史。有人知道这是否已经改变,或者我如何使用python中的C库来使用该函数(到目前为止还没有关于如

我想做的是跟踪屏幕上显示的光标图像,特别是当它因为我进出活动区域而改变时。有很多模块可以跟踪光标的位置,但是光标图像上的信息非常有限

我发现一篇帖子提到,对于使用win32gui的windows:


但是,在linux下,有没有一种方法可以使用Xlib实现这一点呢?我进一步发现,XFixes显然有一个名为XFixesGetCursorImage的方法,它没有直接暴露于python,但它也有好几年的历史。有人知道这是否已经改变,或者我如何使用python中的C库来使用该函数(到目前为止还没有关于如何使用该函数的经验)?

我能为您提供的最好的代码是下面的代码,来自我的一个项目
Xwintrack
Xlib
下的
Fixes
模块只提供了
show\u cursor
hide\u cursor
,这使我们能够更改现有属性

这也意味着,由于您无法识别现有光标或其来源的主题,因此,如果更改光标,您必须使用标准的X光标,或者使用
PIL
从图像创建自己的光标。另外,当然,没有回头路了。您将无法恢复到上一个光标,您必须从X库中提供猜测

如果你开始挖掘,研究光标和主题,你会发现这是一个多么曲折的雷区。它似乎是一个由不同部分组成的系统,只是松散地结合在一起,有蜘蛛网和唾液

以下依据:

from Xlib import X, display, Xcursorfont
LEFT_PTR = Xcursorfont.left_ptr
SELECT = Xcursorfont.dotbox

def xcursorselect():
    ''' Change the cursor to a green dotbox to indicate a selection is required
        Beware - there is no way back to the original themed cursor - see xcursornormal()
    '''
    disp = display.Display()
    root = disp.screen().root
    font = disp.open_font('cursor')
    cursor = font.create_glyph_cursor(font, SELECT, SELECT+1, (0, 65535, 0), (0, 0, 0)) #green with black edges
    root.change_attributes(cursor=cursor)
    disp.flush()

def xcursornormal():
    ''' Change the cursor back to White left_ptr to indicate selection finished
        Sadly under python there appears to be no way to identify the existing
        cursor image, so we're left with returning to a standard X cursor, rather
        than the Themed one
    '''
    disp = display.Display()
    root = disp.screen().root
    font = disp.open_font('cursor')
    cursor = font.create_glyph_cursor(font, LEFT_PTR, LEFT_PTR+1, (65535, 65535, 65355), (0, 0, 0)) #white with black edges
    root.change_attributes(cursor=cursor)
    disp.flush()

如果您确实提出了解决方案,请务必在此处发布。

XFixesGetCursorImage来自XFixes扩展,除了libX11之外,您还需要libxfixes来使用此函数。不确定您是否已经实现了puthon绑定