当前位置: 首页 > 知识库问答 >
问题:

下载进度条不工作,Python 3

柳杰
2023-03-14

我正在尝试制作一个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。更新()进度。更新_idletask(),但进度条仍不工作。

如何让progressbar显示文件的下载进度?

共有1个答案

赫连骏
2023-03-14

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

如果你用一个最小的、完整的、可验证的例子来更新你的问题,那么我可以帮助你实现这一点。

 类似资料:
  • 我向服务器发出POST请求以生成CSV文件,POST请求的响应是我要写入文件的CSV数据。 我永远不知道CSV文件的大小(它可以是10MB,100MB或1000MB),因此没有内容长度的头。 我已经编写了一个函数,可以下载并向服务器发出POST请求,生成CSV文件并将响应写入CSV文件。然而,我正在努力与进步吧。 如何添加进度条?

  • 我正在通过企业分发开发和分发iPad应用程序。他们下载并执行得很好,所以一切都正常(网络链接、ipa文件、plist文件、供应…)。 “问题”是当用户点击链接下载时,iPad中显示下载进度的进度条上写着“等待…”,但是空的,从不改变。当它完成时,它变为“安装…”,然后它正确地显示安装进度。 对于小型应用程序,这并不是真正的问题,但对于大型应用程序,它会让用户认为什么都没有发生。 有没有办法显示下载

  • 我使用下载管理器api下载大文件,我也实现了。但问题是,下载进度通知显示在状态栏中。但是我想用进度条在活动中显示通知。有人做过吗,如果有请帮帮我。

  • 我带着我的下一个问题来找你xd这是我的JS: 为什么不使用“addClass(”d-block“)函数呢?但是我的”else“很好。 这是我的HTML

  • fetch 方法允许去跟踪 下载 进度。 请注意:到目前为止,fetch 方法无法跟踪 上传 进度。对于这个目的,请使用 XMLHttpRequest,我们在后面章节会讲到。 要跟踪下载进度,我们可以使用 response.body 属性。它是 ReadableStream —— 一个特殊的对象,它可以逐块(chunk)提供 body。在 Streams API 规范中有对 ReadableStr

  • 我的kivy应用程序中有一个ProgressBar。我相信我需要使用,以确保从循环内部更新进度条。 以下代码是用于再现性目的的淡化版本。 ProgressBar类 主要类别: KV文件 此示例显示loading_pb.value按钮单击后代码循环时发生的变化。 进步吧。价值印刷输出 问题进度条的值似乎确实如预期的那样递增,但实际进度条直到循环结束时才立即改变。 相关的 无法更新kivy进度条 ki