我写了一个脚本来下载文件。我用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()完成执行时的时间
我该怎么办?帮帮我
答案 0 :(得分:1)
您尚未显示下载数据的代码,但显然使用的是同步方法。所有窗口系统都通过处理事件来运行。创建窗口并生成事件以将其映射到屏幕上,然后生成另一个窗口以在屏幕上绘制。如果您不允许线程处理事件,那么在您停止忙碌之前显然没有任何事情发生。
要解决此问题,您需要使用异步方法下载数据,或者您可以使用同步方法,但必须在另一个线程上执行此操作。 UI线程(您创建窗口的那个)必须继续处理事件。这基本上意味着永远不会做任何需要很长时间的事情。 Tkinter after()
方法是一种常见的方案,可以将很长的工作分解为许多小块,这些小块作为事件发布以保持工作正常。在这种情况下,最简单的方法是创建一个工作线程来定期下载并将进度更新发布到UI线程。