J'essaie d'ajouter le widget vte
dans mon application. Les exemples que j'ai trouvés utilisent .fork_command()
pour exécuter une commande dans ce widget. Mais selon
http://developer.gnome.org/vte/0.26/VteTerminal.html#vte-terminal-fork-command
il est déconseillé et il est recommandé d'utiliser fork_command_full()
. Ce qui nécessite huit arguments obligatoires. N'ont-ils pas entendu le mot " par défaut "? J'ai été capable de construire des lignes qui fonctionnent d'une certaine manière:
pty_flags = vte.PtyFlags(0)
terminal.fork_command_full(pty_flags, "/home/int", ("/bin/bash", ), "", 0, None, None)
Oui, je connais les enums, j'espère juste que je le fais complètement de travers et qu'il existe un moyen beaucoup plus simple. En connaissez-vous?
P.S. J'utilise quickly
avec le modèle par défaut ubuntu-application
.
P.P.S. La ligne d'importation est from gi.repository import Vte as vte
Voici un exemple de base:
#!/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()
S'appuyant sur la réponse d'ADcomp pour répondre à la volonté de les ajouter de manière dynamique à l'avenir, je pense que vous voudrez peut-être sous-classe 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()
Depuis VTE 0.38, vte_terminal_fork_command_full ()
a été renommé en vte_terminal_spawn_sync ()
. Donc, si vous utilisez des versions plus récentes, vous devez remplacer la réponse de @ ADcomp par ce qui suit:
terminal.spawn_sync(
Vte.PtyFlags.DEFAULT,
os.environ['HOME'],
["/bin/sh"],
[],
GLib.SpawnFlags.DO_NOT_REAP_CHILD,
None,
None,
)