【问题标题】:key_events of GUI widget and stdinGUI 小部件和标准输入的 key_events
【发布时间】:2011-01-31 18:18:07
【问题描述】:

我对 GUI 小部件的标准输入和 key_events 感到很困惑。

在我看来,我通常认为 stdin 是获取进程键盘输入的普通方式。例如,如果我有一个进程,那么我可以使用标准输入来进行键盘输入。这通常用于为子进程制定 I/O 方向以获取键盘输入。例如,我可以制作 subprocess.Popen(stdin=PIPE)

另一方面,对于 GUI,我使用 wx.TexCtrl 或 py.Shell.shell 来捕获关键事件,例如输入。

所以我在这里很困惑,如果我有一个 GUI 或 pyShell 正在运行,当我通过键盘输入时,是通过标准输入还是通过 GUI 键事件捕获系统?如果通过 GUI 键事件系统,我怎样才能获得键盘标准输入?我还能像普通的非 GUI 编程一样简单地将键盘输入重定向到我的子进程(在 GUI 内)吗?

非常感谢任何 cmets。

【问题讨论】:

    标签: user-interface redirect event-handling wxpython stdin


    【解决方案1】:

    当您键入时,输入来自 GUI 事件机制,而不是来自标准输入。您问如何获得“键盘标准输入”,答案与任何其他类型的程序相同:您阅读它(但它几乎肯定是空的)。重要的是要意识到如果通过双击桌面上的图标启动 GUI,它可能没有标准输入。

    不,如果我理解您的问题,您不能“将键盘输入重定向到 [您的] 子进程”。 Stdin 确实与 GUI 完全无关。如何通过 GUI 读取键盘输入与标准输入完全断开。

    【讨论】:

    • 布莱恩,非常感谢您的回答。我先点击你的答案。只是根据你的回答提出几个问题。如果 sys.stdin 仍然存在,我可以通过它在 GUI 程序中、从文件还是从键盘输入?如果我在 bash 中从 python 启动 wxPython GUI,bash 窗口中的 sys.stdin 是吗?此外,根据您的描述,GUI 似乎没有 sys.stdin 使用,但是,sys.stdout 有时可能有助于在 textctrl 小部件上打印信息。所以基于 pyCrust 或 GUI 的 shell,实际上只使用了 sys.stdout,而没有使用 sys.stdin,对吗?
    • @pepero:不,您不能通过键盘向标准输入输入,但是通过适当数量的编码,您可以使用"echo hello" | mygui 之类的方式将一些数据通过管道传输到您的 gui。不过,我想不出任何值得这样做的用例。
    • 我想一个用例是插入一个通过管道传递数据的 GUI 查看器;特别是在非平凡的管道链中。如果您的输入流是高容量的,线程可能是合适的;由于 GUI API 通常被设计为异步事件处理程序;这意味着您的数据可能会比您的 UI 更新更快地缓冲。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    相关资源
    最近更新 更多