正如我在标题中提到的,我有两个程序:第一个程序创建一个 GtkWindow、GtkDrawingArea 并返回 GtkDrawingArea 窗口的 XID。第二个收到 XID 并对其执行一些操作(调整大小、绘图等)。调整大小有效,但如果我绘制,我在我的 GtkDrawingArea 上看不到任何东西(它仍然很清楚)。看起来,问题出在 GtkDrawingArea 配置(用于绘图)中,XID 是正确的。这是我用来测试它的示例代码:
#!/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()
最佳答案
现在这是通过“memfd_create”创建共享内存并渲染到该内存区域来完成的。双方通过“cairo_image_surface_create_for_data”将内存映射到可绘制对象中。这非常简单。
关于python - 通过其他应用程序在 GtkDrawingArea 中绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27432399/