Python 其他应用程序在GtkDrawingArea中绘图

Python 其他应用程序在GtkDrawingArea中绘图,python,linux,python-3.x,gtk,xlib,Python,Linux,Python 3.x,Gtk,Xlib,正如我在标题中提到的,我有两个程序:首先,它创建GtkWindow、GtkDrawingArea并返回GtkDrawingArea窗口的XID。第二个接收到XID并对其执行一些调整大小、绘制等操作。调整大小是可行的,但是如果我在GtkDrawingArea上没有看到任何东西,它仍然是清晰的。看起来,问题在于GtkDrawingArea的绘图配置,XID是正确的。下面是我用来测试它的示例代码: 现在可以通过memfd_create创建共享内存并将其渲染到此内存区域来完成此操作。两侧通过cairo

正如我在标题中提到的,我有两个程序:首先,它创建GtkWindow、GtkDrawingArea并返回GtkDrawingArea窗口的XID。第二个接收到XID并对其执行一些调整大小、绘制等操作。调整大小是可行的,但是如果我在GtkDrawingArea上没有看到任何东西,它仍然是清晰的。看起来,问题在于GtkDrawingArea的绘图配置,XID是正确的。下面是我用来测试它的示例代码:


现在可以通过memfd_create创建共享内存并将其渲染到此内存区域来完成此操作。两侧通过cairo\u image\u surface\u create\u为数据将内存映射到一个可绘制的图形中。这很直截了当。

我认为你做不到。请改为仅使用Gtk.Socket和Gtk.Plug X11,但如果您使用的是XID,那么这只是X11。@ptomto好的,但是否可以在第一个应用程序中创建Gtk.Socket,并在第二个应用程序中使用它而不创建Gtk.Plug?我试图从套接字的ID创建XWindow,但我只能更改窗口的几何图形-没有绘制任何内容。否。Gtk.Socket和Gtk.Plug必须配对。那么在纯Xlib中是否有这样做的选项?可能,但Gtk将透支窗口,除非您使用插座和插头系统。感谢您的回答,我在3年前问过这个问题,但可能有类似问题的人会发现这一点,您的答案将帮助他们。
#!/usr/bin/python3
from gi.repository import Gtk, Gdk, GdkX11

WIDTH = 800
HEIGHT = 600

drawing_area = Gtk.DrawingArea()
drawing_area.set_size_request(WIDTH, HEIGHT)
drawing_area.add_events(Gdk.EventMask.ALL_EVENTS_MASK)
drawing_area.set_double_buffered(False)
drawing_area.realize()

window = Gtk.Window()
window.add(drawing_area)

window.connect('delete-event', Gtk.main_quit)
window.show_all()

# Just for sure
drawing_area.get_window().resize(WIDTH, HEIGHT)

xid = drawing_area.get_window().get_xid()
print('APP_XID=%s' % xid)

Gtk.main()