擅长:python、mysql、java
<p>[不是完整的答案]
我有足够的片段,这可能是更有用的回答,而不是作为一个评论。很抱歉,我没有弄清这件事的真相</p>
<p>{a1}本身只提到它可以通过对GTK的某些调用进行实例化——我不确定这是否只是对GTK2的旧绑定。我可以找到一个片段来使用GTK+3获得Cairo上下文,但是如果不使用ctypes,从Cairo上下文返回到它使用的表面似乎是不可行的</p>
<p>因此,您基本上需要使用Python ctypes调用<a href="https://www.cairographics.org/manual/cairo-XLib-Surfaces.html#cairo-xlib-surface-create" rel="nofollow noreferrer">Cairo's C ^{<cd1>}</a>,并找到一种方法,使用ctypes从上述函数返回的指针创建Python cairo.XlibSurface实例。这就是您可能必须在pygtk遗留代码库中用C找到的“缺少的链接”,并在Python代码中用ctypes进行复制</p>
<p>至于第一个<code>cairo_xlib_surface_create</code>调用所需的参数,您可能可以使用<a href="https://pypi.org/project/python-xlib/" rel="nofollow noreferrer">Python XLib</a>获取它们-下面的代码片段为您提供了一个窗口GID和用于X显示和窗口的Python包装:</p>
<pre class="lang-py prettyprint-override"><code>from Xlib import X, display
pd = display.Display()
win = pd.screen().root.create_window(0, 0, 640, 480, 0, pd.screen().root_depth, X.InputOutput, X.CopyFromParent)
win.map()
pd.sync()
xid = xx.__resource__()
</code></pre>