【问题标题】:File Downloader with GUI progress display?带有 GUI 进度显示的文件下载器?
【发布时间】:2010-08-03 07:14:48
【问题描述】:

我正在尝试编写一个具有 GUI 并显示正在下载的文件的进度的文件下载器。我希望它显示文本百分比、进度条或两者兼而有之。我确信这可以在 Python 中完成,但我不确定如何。

我在 MS Windows XP 上使用 Python 2.6。

【问题讨论】:

    标签: python windows user-interface download progress-bar


    【解决方案1】:

    最简单的进度条对话框可能是EasyDialogs for Windows(遵循与mac版python中包含的EasyDialogs模块相同的api)

    要确定下载进度,请使用带有“reporthook”的urllib.urlretrieve()

    类似这样的:

    import sys
    from EasyDialogs import ProgressBar
    from urllib import urlretrieve
    
    def download(url, filename):
        bar = ProgressBar(title='Downloading...', label=url)
    
        def report(block_count, block_size, total_size):
            if block_count == 0:
                bar.set(0, total_size)
            bar.inc(block_size)
    
        urlretrieve(url, filename, reporthook=report)
    
    if __name__ == '__main__':
        url = sys.argv[1]
        filename = sys.argv[2]
        download(url, filename)
    

    当然还有其他库可用于更丰富的 GUI 界面(但如果您只需要这些库,它们会更大或更难)。下载也是如此:可能有比 urllib 更快的东西,但这个很简单并且包含在 stdlib 中。

    【讨论】:

    • 感谢您提供此代码 sn-p。事实证明它非常有用。但是,我还有其他几个问题。 1)。它在哪里保存文件?我假设在活动目录中? 2)。我如何将其合并到 Tkinter 窗口中?
    • 我做了一些修改,这段代码完美运行!谢谢!!
    • 好的,我正在使用你的代码,但是进度条对话框在完成后没有关闭。因此,我在 urlretrieve 行之后放置了 del bar,但我不断收到以下错误:“无法删除嵌套范围中引用的变量 'bar' 我尝试移动它,但似乎找不到解决方案。跨度>
    • 保存文件:如果只提供文件名,则为当前工作目录,否则为您提供的路径。就像 open() 会做的那样。我对 Tkinter 了解不多,所以我无法帮助你。一旦取消引用,进度条应该消失。在这种情况下,当 download() 函数返回时。您不需要使用 del。你能发布你的代码吗?它对我有用(尽管如果我添加 del bar,我会得到同样的错误,这是因为在报告函数中也引用了 bar)。您也可以尝试使用 bar = None 代替 del bar。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 2019-08-26
    • 2014-11-18
    • 2011-03-02
    相关资源
    最近更新 更多