Làm cách nào để thêm tiện ích đầu cuối vte trong GTK3?


8

Tôi đang cố gắng thêm vtewidget trong ứng dụng của mình và các ví dụ tôi đã tìm thấy sử dụng .fork_command()để thực thi một lệnh trong widget đó. Nhưng theo

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

nó không được dùng nữa và nên sử dụng fork_command_full(). Mà cần tám đối số bắt buộc. Họ không nghe thấy từ " mặc định " sao? Tôi đã có thể xây dựng các dòng hoạt động bằng cách nào đó:

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

Vâng, tôi biết về enum, tôi chỉ hy vọng rằng tôi đang làm điều này hoàn toàn sai và có một cách dễ dàng hơn nhiều. Bạn có biết gì không?

PS tôi đang sử dụng quicklyvới ubuntu-applicationmẫu mặc định .

PPS Dòng nhập khẩu là from gi.repository import Vte as vte


Bạn có hàng dài đó rất nhiều lần hay chỉ một lần?
RobotHumans

1
chỉ một lần ngay bây giờ nhưng tôi muốn thêm chúng một cách linh hoạt trong tương lai.
int_ua

Câu trả lời:


14

Dưới đây là một ví dụ cơ bản:

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

Làm cách nào tôi có thể bắt / xử lý / khôi phục từ người dùng gửi 'thoát' trong thiết bị đầu cuối? Khi thoát tôi có cần sinh ra một thiết bị đầu cuối vte mới không? hoặc có lẽ chỉ sinh ra một vỏ mới bên trong thiết bị đầu cuối? Ngoài ra, bạn có thể liên kết với tài liệu về cách thao tác với thiết bị đầu cuối vte, ví dụ: mở bash khi nhấp vào nút gtk không?
ThorSummoner

5

Dựa trên câu trả lời của ADcomp để giải quyết vấn đề muốn thêm chúng một cách linh hoạt trong tương lai, tôi nghĩ bạn có thể muốn phân lớp 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()

Cảm ơn :) __init__(self, command)sẽ còn đẹp hơn nữa, tôi sẽ thử điều này sau.
int_ua

@int_ua - bạn muốn gì hơn nữa? Tôi nghĩ rằng bạn chỉ đang tìm cách nhúng một thuật ngữ từ ngữ cảnh của câu hỏi
RobotHumans

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.