GTK3에서 VTE 터미널 위젯을 추가하는 방법?


8

vte내 응용 프로그램 에 위젯 을 추가하려고하는데 찾은 예제 .fork_command()는 해당 위젯에서 명령을 실행하는 데 사용 됩니다. 그러나에 따르면

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

더 이상 사용되지 않으며을 사용하는 것이 좋습니다 fork_command_full(). 8 개의 필수 인수가 필요합니다. 그들은 " 기본 "단어 를 듣지 못했습니까 ? 어떻게 든 작동하는 줄을 만들 수있었습니다.

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

예, 열거 형에 대해 알고 있습니다.이 작업이 완전히 잘못되고 훨씬 쉬운 방법이 있기를 바랍니다. 아시나요?

추신 : 나는 quickly기본 ubuntu-application템플릿 과 함께 사용 하고 있습니다.

수입 라인은 from gi.repository import Vte as vte


긴 줄을 여러 번 또는 한 번만 가지고 있습니까?
RobotHumans 2016 년

1
지금 한 번만 할 수 있지만 앞으로는 동적으로 추가하고 싶습니다.
int_ua 2016 년

답변:


14

기본 예는 다음과 같습니다.

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

터미널에서 '종료'를 제출 한 사용자를 어떻게 잡거나 처리 / 복구 할 수 있습니까? 출구에서 새로운 vte 터미널을 생성해야합니까? 아니면 터미널 내부에 새로운 쉘을 생성합니까? 또한 vtk 터미널 조작 방법 (예 : gtk 버튼 누르기시 bash 열기)에 대한 문서로 링크 할 수 있습니까?
ThorSummoner

5

앞으로 동적으로 추가하려는 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()

감사합니다 :) __init__(self, command)더 좋을 것입니다. 나중에 시도하겠습니다.
int_ua 2016 년

@int_ua-더 원하는 것? 질문의 맥락에서 용어를 삽입하려고한다고 생각했습니다.
RobotHumans

4

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,
    )
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.