gpt4 book ai didi

python - 将标准输出(打印)命令打印到扩展名为 .pyw 的 tkinter 窗口

转载 作者:太空宇宙 更新时间:2023-11-04 05:19:26 25 4
gpt4 key购买 nike

我正在使用 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 窗口的方法。

最佳答案

打印调用不起作用的原因是当您在 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()

关于python - 将标准输出(打印)命令打印到扩展名为 .pyw 的 tkinter 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40794758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com