我开始使用Glade、Python和Gtk3库构建GUI。我想尝试在我的GUI中链接一个外部窗口,并将它放在一个容器内显示。这是否可能?哪种容器对象是最好的选择?
我开始搜索,但在Gtk2中易于使用的方法(例如此处)现在无法在Gtk3中使用。
我发现了一个非常有趣的帖子(此处),它允许我设置目标窗口的正确ID,但我仍然不知道如何在我的GUI中显示它。
我试图更改这些教程来使用cairo,但没有成功。
到目前为止,我的代码片段如下(我想在map_area容器中显示ID = 0x360000b的窗口,并且我必须使用“self.”处理结构)。暂时,map_area容器是一个Drawingarea。
# if condition occurs
Gdk.Window.process_all_updates()
win_id = 0x360000b # from xwininfo command
root_win = GdkX11.X11Display.get_default()
win = GdkX11.X11Window.foreign_new_for_display(root_win, win_id)
width = win.get_width()
height = win.get_height()
self.map_area = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
pixbuf = Gdk.pixbuf_get_from_window(win, 0, 0, width, height)
cr = cairo.Context(self.map_area)
Gdk.cairo_set_source_pixbuf(cr, pixbuf, 0, 0)
cr.paint()
有人能帮我吗? 非常感谢!
-into
选项可用于此操作。(如果您愿意将Xlib添加为脚本的依赖项,则可以为其他应用程序执行此操作。我将发布一个带有示例的答案。) - PhillipXReparentWindow
函数可用,并且您还可以通过窗口的“reparent”函数从GdkX11访问该函数,但是如果尝试重新父化一个已经可见的窗口,至少xterm将退出。所以很抱歉我没有例子可以提供。 - Phillip