【问题标题】:Redirecting IDLE output to a GUI (Python33)将 IDLE 输出重定向到 GUI (Python33)
【发布时间】:2013-06-30 06:50:18
【问题描述】:

有没有办法将所有 IDLE 输出重定向到 tkinter GUI,或者对 IDLE 输出做些什么?我想在 tkinter GUI 中显示来自 http.server 模块的所有 IDLE 输出,以监控发生在网络服务器上的所有事情。这是否可以通过一些简单的函数/命令来实现,或者这是否涉及编辑 IDLE lib 文件?

之前问过类似的问题,我想将整个 IDLE/python shell 嵌入到我的监控程序中,但这对于最新的 python 版本似乎是不可能的。

编辑:

from tkinter import *
import sys, time, threading
global TXT
root = Tk()
TXT = Text(root, font="Arial")
TXT.pack(fill=X)

class RedirectText(object):

    def __init__(self, TXT):
        self.out = TXT

    def write(self, string):
        TXT.insert(END, string)
sys.stdout = RedirectText(TXT)

for i in range(10):
    print("test", i+1)

def thread():
    print("Delayed")
    threading.Timer(1, thread).start()

threading.Timer(1, thread).start()
root.mainloop()

删除了所有错误代码,现在有了这个。不会写任何与系统相关的东西,只写 print() 函数里面的东西。仍在寻找将insert所有系统输出到文本小部件的方法。

【问题讨论】:

  • 请参阅 [this answer][1] 了解将标准输出重定向到文本小部件的 Tkinter 示例。 [1]:stackoverflow.com/a/12352237/7432
  • @BryanOakley 再一次,一个绝妙的答案!正是我需要的。不知何故没有找到它,我做了很多谷歌搜索。

标签: python redirect tkinter output python-idle


【解决方案1】:

你不想重定向 IDLE 输出,你想重定向系统标准输出。这是我之前在 WXPython 中使用过的一些东西:

class RedirectText(object):
    def __init__(self, TextCtrl):
        self.out = TextCtrl

    def write(self, string):
        wx.CallAfter(self.out.WriteText, string)

然后进行初始化:

 import sys
 sys.stdout = RedirectText(log)

其中 log 是 WX TextCtrl 小部件。

【讨论】:

  • 看起来很清楚,但不幸的是 wxPython 不适用于 python 3.3。我认为使用 tkinter 是可行的。 TextCtrl 是小部件吗? CallAfter 的用途对我来说似乎很模糊。但基本上我的解释是您制作了一个文本小部件,并将系统标准输出重定向到该小部件?
  • 我想 Tkinter 有一个你可以使用的类似系统。当您在 Python 脚本中打印某些内容时,打印函数会调用 sys.stdout.write,因此如果您用一个也具有写入函数的新对象覆盖它,它将导致重定向打印语句。
  • This answer 有一个将标准输出重定向到 tkinter 文本小部件的 Tkinter 示例
【解决方案2】:

有关将标准输出重定向到 Tkinter 文本小部件的示例,请参阅 this answer

【讨论】:

    猜你喜欢
    • 2018-03-26
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 2012-09-16
    • 2010-10-08
    相关资源
    最近更新 更多