使用Tkinter更新实时文本框

时间:2019-03-26 19:27:28

标签: python python-3.x tkinter

我正在为执行一些缓慢计算的应用程序制作一个简单的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) 函数时可以打印每条消息,那就太好了。

0 个答案:

没有答案