非阻塞打印重定向到 Tkinter 文本小部件

问题描述

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

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)