我正在尝试制作用户点击按钮的GUI,应用程序从互联网上下载文件。我想要一个进度条显示文件下载完成的时间。为了实现这一点,我已经实现了一个线程来在单击下载按钮时运行进度条的功能。这是我正在使用的代码:
def progthread():
threading.Thread(target=download).start()
def download():
blocknum = 0
blocksize = 0
url = "https://www.python.org/static/img/python-logo.png"
filename = "C:\My Python Apps\MyFile.png"
response = requests.get(url, stream=True)
total_length = response.headers.get('content-length')
with open(filename, "wb") as f:
for data in response.iter_content(chunk_size=10000):
f.write(data)
percent = int(blocknum * blocksize / int(total_length))
progress['value'] = percent
当我运行应用程序时,它会下载文件并且不会出现错误。但进度条没有做任何事情。我尝试使用progress.update()
和progress.update_idletask()
,但进度条仍无效。
如何获取进度条以显示文件的下载进度?
答案 0 :(得分:1)
问题是你拥有的循环阻塞了tkinter的主循环,所以整个GUI都锁定了。对于这样的事情,你应该在一个单独的线程中启动下载循环,以便它可以与tkinter mainloop同时运行。您可以使用tkinter IntVar从其他线程更新进度条。
如果您使用Minimal, Complete, and Verifiable example更新问题,那么我可以帮助您实施该问题。