正如标题所说,我有一个我重定向print()
到的文本小部件。为此,我使用
class TextRedirector(object):
def write(self, str):
main_text.insert(1.0, str)
接着
sys.stdout = TextRedirector()
我不能做的是在插入新文本之前清除文本。为此,我添加main_text.delete(1.0, "end")
如下
class TextRedirector(object):
def write(self, str):
main_text.delete(1.0, "end")
main_text.insert(1.0, str)
这导致根本没有打印任何内容。
我也尝试像这样在小部件中打印文本
text = "my test is here"
class TextRedirector(object):
def write(self, str):
main_text.delete(1.0, "end")
main_text.insert(1.0, text)
它工作得很好。它会清除我输入的任何内容(因为我保持状态 =“正常”)并打印我的文本。
任何帮助都感激不尽!
编辑:
这是这篇文章中的代码,您可以将其用作示例。
import tkinter as tk
import sys
class ExampleApp(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
toolbar = tk.Frame(self)
toolbar.pack(side="top", fill="x")
b1 = tk.Button(self, text="print to stdout", command=self.print_stdout)
b1.pack(in_=toolbar, side="left")
self.text = tk.Text(self, wrap="word")
self.text.pack(side="top", fill="both", expand=True)
sys.stdout = TextRedirector(self.text)
def print_stdout(self):
print("This is my text")
class TextRedirector(object):
def __init__(self, widget, tag="data"):
self.widget = widget
self.tag = tag
def write(self, str):
self.widget.configure(state="normal")
#self.widget.delete(1.0, "end")
self.widget.insert("end", str, (self.tag,))
app = ExampleApp()
app.mainloop()
与我的代码相同,如果您从def write(self, str)
函数中删除 #,它将不会打印文本。
我想要的是重定向print()
到文本小部件,但每次都在一个清晰的文本框中,而不是作为一个新行。这意味着,如果我按上述代码中的 b1 按钮 4 次,我将在文本框中看到它
This is my text
而不是这个
This is my text
This is my text
This is my text
This is my text