将IDLE输出重定向到GUI(Python33)

时间:2013-07-02 18:48:02

标签: python redirect tkinter output python-idle

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

之前问过similair,我想把整个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将所有系统输出转换为文本小部件。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您不想重定向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小部件。