我正在为执行一些缓慢计算的应用程序制作一个简单的GUI。我虽然要添加类似于控制台的内容,但是我可以显示消息以告知程序执行情况。因为我正在使用new Date(0) => 4
new Date(60000) => 2
,所以我想我会添加一个文本框并将标准输出重定向到它,原则上这很整洁。但是,当我按下开始计算的按钮时,界面将完全停止,并且仅在计算完成后才更新文本框,这违反了此控制台的目的。
有没有一种方法可以不停止窗口并实时更新文本?
这是该问题的最小工作示例:
Tkinter
按下按钮时,窗口将暂停,然后所有消息将立即打印出来。如果在实际调用from tkinter import *
import math, sys
class StdoutRedirector(object):
def __init__(self, text_widget):
self.text_space = text_widget
def write(self, string):
self.text_space.insert('end', string)
self.text_space.see('end')
def slowprint():
print("First line")
aaa = math.factorial(300000)
print("Second line")
bbb = math.factorial(300000)
print("Third line")
window = Tk()
text_box = Text(window, wrap='word')
text_box.grid(columnspan=5, row=1, sticky='nswe', padx=5, pady=5)
sys.stdout = StdoutRedirector(text_box)
Button(window,text='Print', command=slowprint).grid(padx=5, pady=5)
函数时可以打印每条消息,那就太好了。