如何在我的PyGTK GUI中嵌入外部应用程序

9

我正在设计一个pygtk GUI,并希望将外部应用程序嵌入其中。

有没有人知道如何实现这个功能?


你说的“embed”是什么意思不太清楚?你的情况能否更具体一些? - zdav
“嵌入”是什么意思?请更具体地给出例子。 - Diego Torres Milano
1
我以前在Gambas2中做过这个。它应该看起来像这样http://upload.snelhest.org/images/0812134.png您可以在屏幕截图中看到gparted如何嵌入我的应用程序。通过“嵌入”,我指的是启动外部应用程序...但是,它不需要窗口管理器进行装饰并将其放置在桌面上,而是需要直接进入我的应用程序。想象一下,在窗口而不是小部件上执行重新父级操作。 - M0E-lnx
4个回答

4
这取决于您要嵌入到您的应用程序中的是什么应用程序,但如果另一个应用程序是GTK应用程序(或支持XEMBED协议的应用程序),您应该可以使用gtk.Pluggtk.Socket来实现这一点。PyGTK教程中有一个部分解释了如何做到这一点:

PyGTK 2.0教程-插头和插座 来自Wayback Machine(archive.org)


我确实看过那个,但我不知道它如何帮助我嵌入外部应用程序。xwinfo报告的窗口ID类似于0x12343,但插件需要一个LONG格式的窗口ID...我不知道如何将这两个部分结合起来。 - M0E-lnx

3
这可能会对您有所帮助。阅读文章19.15。如何使用插头和插座嵌入内容?(http://faq.pygtk.org/index.py?req=all#19.15)并了解如何将任意X Window应用程序嵌入(Py)GTK Socket中。

1
你不需要使用外部程序来获取gtk.Plug/gtk.Socket的ID,它们有各自的函数来实现。请参考这个教程中的示例:
从Wayback Machine(archive.org)查看PyGTK 2.0 Tutorial - Plugs and Sockets link

0

如果您正在尝试重新父化一个外部窗口(可能不是gtk窗口),您可以使用以下方法:

w = gdk.window_foreign_new(window_id)

从操作系统窗口句柄获取gdk窗口对象,然后使用

w.reparent(parent_window, x, y)

将其重新分配到现有的gtk容器中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接