【问题标题】:Add stream I/O to a Python/GTK 3 GUI将流 I/O 添加到 Python/GTK 3 GUI
【发布时间】:2018-04-01 19:30:22
【问题描述】:

我的 Python 程序有一个用 GTK 3 编写的 GUI(我通过 from gi.repository import Gtk 使用 GTK 3)。我打电话给Gtk.main() 来运行GUI。除了运行 GUI 之外,程序还应该不断地监视标准输入中的传入命令,并将响应写入标准输出。

在 Python 中使用 GTK 3 执行此操作的正确方法是什么?有什么方法可以将标准输入侦听器挂接到Gtk.main() 上吗?我可以使用 Python 的标准 I/O API 从 sys.stdin 读取并写入 sys.stdout 还是需要使用一些等效的 Glib API?我可以将我的响应写到标准输出还是我需要关心缓冲并将我的输出代码挂钩到一些 Glib I/O 抽象?

【问题讨论】:

标签: python gtk glib


【解决方案1】:

我设法拼凑了一个非常基本的脚本:

import os
import sys

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import GLib, Gtk

logfile = open(os.path.splitext(__file__)[0]+'.log', 'w')

def on_stdin(fobj, cond):
    line = fobj.readline()
    print(repr(line), file=logfile)
    if line == '':
        sys.exit(0)
    return True

win = Gtk.Window()
win.connect('delete-event', Gtk.main_quit)
win.show_all()
GLib.io_add_watch(sys.stdin, GLib.IO_IN, on_stdin)
Gtk.main()

尝试将ls 传递给它。 if line == '' 很重要:如果流已准备好读取并且读取未返回任何字节,则表示文件结束。如果我们不停止查看文件末尾的流,我们将收到无穷无尽的对on_stdin 的调用,因为 Unix 认为文件末尾的流始终准备好读取(请参阅Why does poll keep returning although there is no input?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    相关资源
    最近更新 更多