2013-07-02 97 views
0

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

以前问过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()函数里面有什么。仍在寻找一种方式将所有系统输出到文本小部件中。

+1

对于Tkinter将stdout重定向到文本小部件的示例,请参见[本答案] [1]。 [1]:http://stackoverflow.com/a/12352237/7432 –

+0

@BryanOakley再次,精彩的回答!正是我需要的。不知怎的,没有找到它,我做了很多谷歌搜索。 – IPDGino

回答

1

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

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部件。

+0

看起来很清楚,但不幸的是wxPython不适用于python 3.3。我认为这是可行的,尽管与tkinter。 'TextCtrl'是一个小部件吗? “CallAfter”的使用对我来说似乎很模糊。但基本上我解释的是,你创建了一个文本小部件,并将系统标准输出重定向到该小部件? – IPDGino

+0

我想象Tkinter有一个类似的系统,你可以使用。当您在Python脚本中打印某些内容时,打印函数会调用sys.stdout.write,因此如果用一个也具有写入函数的新对象覆盖该对象,将导致重定向的打印语句。 –

+0

我已经用一些附加信息更新了OP。 – IPDGino