9 votos

Cómo agregar tev terminal widget en GTK3?

Estoy tratando de agregar vte widget en mi aplicación y los ejemplos que he encontrado uso .fork_command() a ejecutar un comando en ese widget. Pero de acuerdo a

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

que ya no se utiliza y se recomienda el uso fork_command_full(). Que necesita ocho argumentos obligatorios. No han oído hablar de la "valores predeterminados" palabra? He sido capaz de construir líneas de trabajo que de alguna manera:

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

Sí, yo sé acerca de las enumeraciones, sólo espero que lo que estoy haciendo esta completamente equivocado y no hay una manera mucho más fácil. ¿Conoces alguna?

P. S. estoy usando quickly con el valor de ubuntu-application de la plantilla.

P. P. S. La línea de importación es from gi.repository import Vte as vte

15voto

ADcomp Puntos 406

Aquí un ejemplo básico:

#!/usr/bin/env python

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

terminal     = Vte.Terminal()
terminal.fork_command_full(
    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()

6voto

turtle wins Puntos 51

Edificio en ADcomp de respuesta a la dirección de querer agregar dinámicamente en el futuro, creo que usted podría querer subclase de Tev.la 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.fork_command_full(
            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()

5voto

ace Puntos 137

Desde TEV 0.38, vte_terminal_fork_command_full () ha sido renombrado a" vte_terminal_spawn_sync (). Así que si usted está utilizando las versiones más recientes, usted tiene que cambiar @ADcomp la respuesta a la siguiente:

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

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: