Как добавить виджет терминалов vte в GTK3?

Проблема, с которой вы столкнулись, связана с новой функцией получения более унифицированного представления на рабочем столе.

Цель состоит в том, чтобы сопоставить как панель значков, так и всплывающие окна, чтобы соответствовать обои, которые вы выбрали.

Посмотрите это видео: http://www.youtube.com/watch?v=D6z6hn6wZlg

Однако, я думаю, что видел On / Выкл. / Автоматическое выпадающее меню где-то относительно раскраски значка. Но я не могу найти его сейчас. Я буду ткнуть, чтобы посмотреть, смогу ли я его найти. И если я это сделаю, я вернусь сюда с обновлением.

С наилучшими пожеланиями Fredrik L

7
задан 23 June 2012 в 02:43

12 ответов

Основываясь на ответе 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()
13
ответ дан 31 July 2018 в 12:09

Основываясь на ответе 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()
13
ответ дан 2 August 2018 в 00:34

Основываясь на ответе 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()
13
ответ дан 4 August 2018 в 16:04

Основываясь на ответе 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()
13
ответ дан 6 August 2018 в 00:42

Основываясь на ответе 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()
13
ответ дан 7 August 2018 в 18:08

Основываясь на ответе 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()
13
ответ дан 10 August 2018 в 06:54

Основываясь на ответе 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()
13
ответ дан 15 August 2018 в 18:52
  • 1
    Спасибо :) __init__(self, command) будет еще приятнее, я попробую это позже. – int_ua 26 June 2012 в 17:40
  • 2
    @int_ua - больше того, что вы хотели? я думал, что вы просто хотите вставить термин из контекста вопроса – RobotHumans 26 June 2012 в 22:46
  • 3
    Как я могу поймать / обработать / восстановить от пользователя, отправляющего «exit» в терминал? На выходе мне нужно будет создать новый терминал vte? или, возможно, просто создайте новую оболочку внутри терминала? Кроме того, можете ли вы ссылаться на документацию о том, как манипулировать терминалом vte, например, открывать нажатие кнопки нажатия кнопки gtk? – ThorSummoner 8 August 2014 в 00:34

Так как 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,
    )
13
ответ дан 18 August 2018 в 21:41
  • 1
    Как я могу поймать / обработать / восстановить от пользователя, отправляющего «exit» в терминал? На выходе мне нужно будет создать новый терминал vte? или, возможно, просто создайте новую оболочку внутри терминала? Кроме того, можете ли вы ссылаться на документацию о том, как манипулировать терминалом vte, например, открывать нажатие кнопки нажатия кнопки gtk? – ThorSummoner 8 August 2014 в 00:34

Вот базовый пример:

#!/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
ответ дан 22 August 2018 в 07:49
  • 1
    Как я могу поймать / обработать / восстановить от пользователя, отправляющего «exit» в терминал? На выходе мне нужно будет создать новый терминал vte? или, возможно, просто создайте новую оболочку внутри терминала? Кроме того, можете ли вы ссылаться на документацию о том, как манипулировать терминалом vte, например, открывать нажатие кнопки нажатия кнопки gtk? – ThorSummoner 8 August 2014 в 00:34

Поскольку 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,
    )
4
ответ дан 25 May 2018 в 09:50

Основываясь на ответе 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
ответ дан 25 May 2018 в 09:50
  • 1
    Спасибо :) __init__(self, command) будет еще приятнее, я попробую это позже. – int_ua 26 June 2012 в 17:40
  • 2
    @int_ua - больше того, что вы хотели? я думал, что вы просто хотите вставить термин из контекста вопроса – RobotHumans 26 June 2012 в 22:46

Основываясь на ответе 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
ответ дан 25 July 2018 в 18:22

Другие вопросы по тегам:

Похожие вопросы: