Como adicionar o terminal vte widget no GTK3?

7

Estou tentando adicionar o widget vte em meu aplicativo e os exemplos que encontrei usam .fork_command() para executar um comando nesse widget. Mas de acordo com

link

foi descontinuado e é recomendado usar fork_command_full() . Que precisa de oito argumentos obrigatórios. Eles não ouviram a palavra " padrões "? Eu consegui construir linhas que funcionam de alguma forma:

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

Sim, eu sei sobre os enums, só espero que eu esteja fazendo isso completamente errado e que haja uma maneira muito mais fácil. Você conhece algum?

P.S. Estou usando quickly com o modelo ubuntu-application padrão.

P.P.S. A linha de importação é from gi.repository import Vte as vte

    
por int_ua 22.06.2012 / 00:01

3 respostas

13

Aqui um exemplo básico:

#!/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()
    
por ADcomp 25.06.2012 / 12:25
4

Como o valor de VTE 0,38, vte_terminal_fork_command_full () foi renomeado para vte_terminal_spawn_sync () . Portanto, se você estiver usando versões mais recentes, precisará alterar a resposta do @ ADcomp para o seguinte:

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

Com base na resposta do ADcomp ao endereço que deseja adicioná-los dinamicamente no futuro, eu acho que você pode querer subclassificar o 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()
    
por RobotHumans 25.06.2012 / 21:48