1

我已经能够根据这个问题的答案将打印语句重定向到 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 和线程成功地组合了一个非阻塞解决方案,但由于一些不相关的限制,这不是一个理想的解决方案。

有没有办法让打印语句实时显示在文本框中?

4

0 回答 0