web-dev-qa-db-ja.com

GTK3にvteターミナルウィジェットを追加するには?

アプリケーションにvteウィジェットを追加しようとしていますが、見つかった例では.fork_command()を使用してそのウィジェットでコマンドを実行しています。しかし、

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

廃止されたため、fork_command_full()を使用することをお勧めします。 8つの必須引数が必要です。彼らは「defaults」という言葉を聞いたことがありませんか?私は何とか機能する行を構築することができました:

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

はい、列挙型について知っています。これを完全に間違っていることを願っています。もっと簡単な方法があります。何でも知ってますか?

追伸デフォルトのubuntu-applicationテンプレートでquicklyを使用しています。

P.P.S.インポート行はfrom gi.repository import Vte as vteです

8
int_ua

基本的な例を次に示します。

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

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
RobotHumans

VTE 0.38以降、vte_terminal_fork_command_full ()vte_terminal_spawn_sync () に名前が変更されました。したがって、新しいバージョンを使用している場合は、 @ ADcomp's answer を次のように変更する必要があります。

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