我正在用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窗口的方法。
打印调用不起作用的原因是,当您.pyw
在Windows上运行文件时,运行程序的可执行文件实际上是pythonw.exe
,它通过调用WinMain()在内部初始化应用程序,因此不会创建控制台。没有控制台意味着没有标准IO流,因此sys.stdout
未定义。
相反,我建议您子类化tk.Text
并将write()
andflush()
函数定义为实例方法。然后,您所要做的只是将其设置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()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句