如何在我的应用程序中嵌入某个应用窗口,使用任意Python GUI框架

5 投票
2 回答
2955 浏览
提问于 2025-04-15 12:19

我想在我的Python应用程序里放一个看起来像小部件的东西。

就这样。我不需要它们之间有任何互动。我对任何图形界面工具包的解决方案都感兴趣,适用于Windows和X窗口系统。

如果能用Tkinter来实现那就更好了,但这不是必须的。

2 个回答

0

因为声望不够,无法对Glyphs的回答进行评论。要让xterm正常工作,除了上面的评论之外,还需要在

XTerm*allowSendEvents: True 

中添加内容到 ~/.Xresources 文件里。(可能还需要重新加载这个文件,可以用 xrdb -load ~/.Xresources 命令来做)

5

在使用GTK和X窗口(比如Linux、FreeBSD、Solaris)时,你可以通过XEMBED协议来嵌入小部件,这个小部件是通过gtk.Socket来实现的。不过,启动的应用程序必须明确支持这个功能,这样你才能让它自己嵌入。有些应用程序是不支持这个的,尤其是我找不到在Firefox中实现这个功能的方法。

尽管如此,这里有一个示例程序,可以在GTK窗口中运行一个X终端或Emacs会话:

import os
import gtk
from gtk import Socket, Button, Window, VBox, HBox

w = Window()
e = Button("Emacs")
x = Button("XTerm")
s = Socket()
v = VBox()
h = HBox()
w.add(v)
v.add(s)
h.add(e)
h.add(x)
v.pack_start(h, expand=False)

def runemacs(btn):
    x.set_sensitive(False); e.set_sensitive(False)
    os.spawnlp(os.P_NOWAIT, "emacs", 
        "emacs", "--parent-id", str(s.get_id()))

def runxterm(btn):
    x.set_sensitive(False); e.set_sensitive(False)
    os.spawnlp(os.P_NOWAIT, "xterm",
        "xterm", "-into", str(s.get_id()))

e.connect('clicked', runemacs)
x.connect('clicked', runxterm)
w.show_all()
gtk.main()

撰写回答