原文链接👉https://stackoverflow.com/questions/12351786/how-to-redirect-print-statements-to-tkinter-text-widget
import tkinter as tk
import sys
class ExampleApp(tk.Tk):
def __init__(self):
super(ExampleApp, self).__init__()
toolBar = tk.Frame(self)
toolBar.pack(side=tk.TOP, fill=tk.X)
button1 = tk.Button(self, text='print to stdout', command=self.print_stdout)
button2 = tk.Button(self, text='print to stderr', command=self.print_stderr)
button1.pack(in_=toolBar, side=tk.LEFT)
button2.pack(in_=toolBar, side=tk.LEFT)
self.text = tk.Text(self, wrap='word')
self.text.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
self.text.tag_configure('stderr', foreground='#b22222')
sys.stdout = TextRedirector(self.text, 'stdout')
sys.stderr = TextRedirector(self.text, 'stderr')
def print_stdout(self):
print('this is stdout')
def print_stderr(self):
sys.stderr.write('this is stderr\n')
class TextRedirector(object):
def __init__(self, widget, tag='stdout'):
self.widget = widget
self.tag = tag
def write(self, str):
self.widget.configure(state='normal')
self.widget.insert(tk.END, str, (self.tag,)) # (self.tag,) 是设置配置
self.widget.configure(state='disabled')
if __name__ == '__main__':
app = ExampleApp()
app.mainloop()