将 stdout(打印)命令打印到扩展名为 .pyw 的 tkinter window

Printing stdout (print) commands to tkinter window with .pyw extension

我正在使用 tkinter 制作一个 Python (3) GUI 程序,我正在使用重定向功能将我所有的打印语句定向到 GUI 滚动文本框。

这是重定向功能(与 tkinter window 相同 class):

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 的方法 Window。

您的打印调用无法正常工作的原因是,当您 运行 在 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()