由其他应用程序在GtkDrawingArea中绘制

时间:2014-12-11 21:09:07

标签: python linux python-3.x gtk xlib

正如我在标题中提到的,我有两个程序:首先,它创建一个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()

1 个答案:

答案 0 :(得分:0)

现在通过“memfd_create”创建共享内存并渲染到此内存区域来完成此操作。双方都通过“cairo_image_surface_create_for_data”将内存映射为drawable。这是非常直接的。