int*_*_ua 9 python quickly application-development gtk3
我正在尝试vte在我的应用程序中添加小部件,并且我发现用于.fork_command()在该小部件中执行命令的示例。但根据
http://developer.gnome.org/vte/0.26/VteTerminal.html#vte-terminal-fork-command
它已被弃用,建议使用fork_command_full(). 这需要八个强制参数。他们没听说过“默认”这个词吗?我已经能够构建以某种方式工作的行:
pty_flags = vte.PtyFlags(0)
terminal.fork_command_full(pty_flags, "/home/int", ("/bin/bash", ), "", 0, None, None)
Run Code Online (Sandbox Code Playgroud)
是的,我知道枚举,我只是希望我这样做完全错误,并且有更简单的方法。你知道任何?
PS 我正在使用quickly默认ubuntu-application模板。
PPS 进口线是 from gi.repository import Vte as vte
小智 15
这是一个基本示例:
#!/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()
Run Code Online (Sandbox Code Playgroud)
基于 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()
Run Code Online (Sandbox Code Playgroud)
自 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,
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8099 次 |
| 最近记录: |