下载进度条不起作用,Python 3

时间:2017-06-23 12:26:13

标签: multithreading python-3.x tkinter progress-bar downloading

我正在尝试制作用户点击按钮的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(),但进度条仍无效。

如何获取进度条以显示文件的下载进度?

1 个答案:

答案 0 :(得分:1)

问题是你拥有的循环阻塞了tkinter的主循环,所以整个GUI都锁定了。对于这样的事情,你应该在一个单独的线程中启动下载循环,以便它可以与tkinter mainloop同时运行。您可以使用tkinter IntVar从其他线程更新进度条。

如果您使用Minimal, Complete, and Verifiable example更新问题,那么我可以帮助您实施该问题。