Tkinter窗口仅在进程后显示

时间:2015-11-13 16:16:29

标签: python tkinter

我写了一个脚本来下载文件。我用tkinter修补它。我的想法是在单击下载按钮时显示一个新窗口,并在其中显示下载进度。我创建了一个新窗口,但问题是在下载完成之前它不会显示窗口..

b2 = Button(text = "Image Download",font=("Raleway", 10),command =  lambda:     download('Image','.jpg'), width=20)
b2.pack()

执行download()时执行download():

window = Toplevel(root) 
window.geometry('600x350+305+220')
window.wm_title(TYPE + ' Download')

这是用于创建新窗口。但它只显示download()完成执行时的时间

我该怎么办?帮帮我

1 个答案:

答案 0 :(得分:1)

您尚未显示下载数据的代码,但显然使用的是同步方法。所有窗口系统都通过处理事件来运行。创建窗口并生成事件以将其映射到屏幕上,然后生成另一个窗口以在屏幕上绘制。如果您不允许线程处理事件,那么在您停止忙碌之前显然没有任何事情发生。

要解决此问题,您需要使用异步方法下载数据,或者您可以使用同步方法,但必须在另一个线程上执行此操作。 UI线程(您创建窗口的那个)必须继续处理事件。这基本上意味着永远不会做任何需要很长时间的事情。 Tkinter after()方法是一种常见的方案,可以将很长的工作分解为许多小块,这些小块作为事件发布以保持工作正常。在这种情况下,最简单的方法是创建一个工作线程来定期下载并将进度更新发布到UI线程。