2016-11-24 71 views
2

我正在用tkinter製作一個Python(3)GUI程序,並且我正在使用重定向函數將所有打印語句指向GUI滾動文本框。使用.pyw擴展名將stdout(打印)命令打印到tkinter窗口

這是重定向功能(在同一類的Tkinter的窗口):

def redirector(self,inputStr): 
    self.txt.insert(tk.INSERT, inputStr) 
    self.txt.update() 
    self.txt.see(tk.END) 

然後我時,我想開始輸出重定向加入這一行:

sys.stdout.write = self.redirector 

但當我將該文件重命名爲.pyw時,文本框上不顯示任何內容。請建議一種將文本正確指向GUI窗口的方法。

+0

你的意思是說,當你打電話給你的文件'.py'嗎? –

+0

@ Jean-FrançoisFabre是的。 –

+0

請修改答案。 – Jovito

回答

1

之所以打印通話不工作是因爲當你運行一個.pyw文件在Windows上,運行您的程序實際上是pythonw.exe,通過調用WinMain()在內部初始化您的應用程序,因此不會創建可執行一個控制檯。沒有控制檯意味着沒有標準IO流,因此sys.stdout未定義。

相反,我建議你的子類tk.Text,並將write()flush()函數定義爲實例方法。然後,你所要做的就是將sys.stdout設置爲你的子類實例,一切都應該工作。

import sys 
import tkinter as tk 


class TextOut(tk.Text): 

    def write(self, s): 
     self.insert(tk.CURRENT, s) 

    def flush(self): 
     pass 


if __name__ == '__main__': 
    root = tk.Tk() 
    text = TextOut(root) 
    sys.stdout = text 
    text.pack(expand=True, fill=tk.BOTH) 
    root.mainloop() 
+0

我需要在我的程序中實現這個功能,其中tkinter窗口通過名爲App()的類運行。我該怎麼做呢?對不起,我對Python真的很陌生。 –

+0

@NikhilRamakrishnan請分享您的完整代碼鏈接。 – Jovito

+0

這裏是代碼 - http://pastebin.com/CEXhSCcH –