我正在使用tkinter制作Python(3)GUI程序,我使用重定向功能将所有打印语句定向到GUI滚动文本框。
这是重定向功能(与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 :(得分:1)
您的打印调用无法正常工作的原因是,当您在Windows上运行.pyw
文件时,运行您的程序的可执行文件实际上是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()