2013-07-02 98 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