我已经能够根据这个问题的答案将打印语句重定向到 Tkinter 文本小部件。它描述了一个重定向标准输出的类:
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("end", str, (self.tag,))
self.widget.configure(state="disabled")
利用 TextRedirector 类,我有以下代码
import sys
import time
from tkinter import *
root = Tk()
t = Text(root, width = 20, height = 5)
t.grid()
old_stdout = sys.stdout
sys.stdout = TextRedirector(t)
for i in range(5):
print i + 1
time.sleep(1)
sys.stdout = old_stdout
然而,这个解决方案似乎是阻塞的(一旦 for 循环结束,文本就会立即显示出来)。
我已经使用 Popen 和线程成功地组合了一个非阻塞解决方案,但由于一些不相关的限制,这不是一个理想的解决方案。
有没有办法让打印语句实时显示在文本框中?