如何在 GTK3 中添加 vte 终端小部件?

如何在 GTK3 中添加 vte 终端小部件?

我正在尝试vte在我的应用程序中添加小部件,我找到的示例用于.fork_command()在该小部件中执行命令。但根据

http://developer.gnome.org/vte/0.26/VteTerminal.html#vte-terminal-fork-command

它已被弃用,建议使用fork_command_full()。它需要八个强制参数。他们没听说过“默认值“这个词?我已经能够构造出一些能以某种方式起作用的线条:

pty_flags = vte.PtyFlags(0)
terminal.fork_command_full(pty_flags, "/home/int", ("/bin/bash", ), "", 0, None, None)

是的,我知道枚举,我只是希望我的做法完全是错的,而且还有更简单的方法。你知道吗?

PS 我正在使用quickly默认ubuntu-application模板。

PPS 导入线路为from gi.repository import Vte as vte

答案1

这是一个基本的例子:

#!/usr/bin/env python

from gi.repository import Gtk, Vte
from gi.repository import GLib
import os

terminal     = Vte.Terminal()
terminal.spawn_sync(
    Vte.PtyFlags.DEFAULT,
    os.environ['HOME'],
    ["/bin/sh"],
    [],
    GLib.SpawnFlags.DO_NOT_REAP_CHILD,
    None,
    None,
    )

win = Gtk.Window()
win.connect('delete-event', Gtk.main_quit)
win.add(terminal)
win.show_all()

Gtk.main()

答案2

自 VTE 0.38 起,vte_terminal_fork_command_full ()已重命名为vte_terminal_spawn_sync ()。因此,如果您使用的是较新的版本,则必须更改@ADcomp 的回答改为:

terminal.spawn_sync(
    Vte.PtyFlags.DEFAULT,
    os.environ['HOME'],
    ["/bin/sh"],
    [],
    GLib.SpawnFlags.DO_NOT_REAP_CHILD,
    None,
    None,
    )

答案3

基于 ADcomp 的回答,解决将来想要动态添加它们的问题,我认为您可能想要将 Vte.terminal 子类化。

#!/usr/bin/env python

from gi.repository import Gtk, Vte
from gi.repository import GLib
import os

class MyTerm(Vte.Terminal):
    def __init__(self, *args, **kwds):
        super(MyTerm, self).__init__(*args, **kwds)
        self.spawn_sync(
            Vte.PtyFlags.DEFAULT,
            os.environ['HOME'],
            ["/bin/sh"],
            [],
            GLib.SpawnFlags.DO_NOT_REAP_CHILD,
            None,
            None,
            )

win = Gtk.Window()
win.connect('delete-event', Gtk.main_quit)
bigbox = Gtk.Box()
win.add(bigbox)
bigbox.add(MyTerm())
bigbox.add(MyTerm())
win.show_all()

Gtk.main()

答案4

Vte.Terminal.spawn_sync已弃用。因此,如果您使用的是 Vte 版本 0.48 或更高版本,请使用Vte.Terminal.spawn_async相反。以下是 Vte.Terminal.spawn_async 的一个示例:

terminal.spawn_async(
    Vte.PtyFlags.DEFAULT, # Pty Flags
    os.environ['HOME'], # Working DIR
    ["/bin/bash"], # Command/BIN (argv)
    None, # Environmental Variables (envv)
    GLib.SpawnFlags.DEFAULT, # Spawn Flags
    None, None, # Child Setup
    -1, # Timeout (-1 for indefinitely)
    None, # Cancellable
    None, # Callback
    None # User Data
)

相关内容