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


8

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

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

不推荐使用,建议使用fork_command_full()。这需要八个强制性参数。他们没有听到“ defaults ”这个词吗?我已经能够构造出行之有效的线:

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

是的,我了解这些枚举,我只是希望自己做的事情完全错误,并且有一种更简单的方法。你知道任何?

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

PPS导入行是 from gi.repository import Vte as vte


你有几次还是只有一次?
RobotHumans 2012年

1
现在只是一次,但我想在将来动态添加它们。
int_ua 2012年

Answers:


14

这里是一个基本的例子:

#!/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()

如何从终端中提交“退出”的用户中捕获/处理/恢复?在出口时,我需要产生一个新的VTE终端吗?还是只是在终端内产生一个新的外壳?另外,您可以链接到有关如何操作vte终端的文档,例如,单击gtk按钮时打开bash吗?
ThorSummoner 2014年

5

基于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()

谢谢:) __init__(self, command)会更好,我稍后再试。
int_ua 2012年

@int_ua-您还想要什么?我还以为你只是希望嵌入一个任期从问题的背景下
RobotHumans

4

从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,
    )
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.