我正在尝试使用 Tkinter GUI 窗口制作文件下载器,它将使用以下行下载文件:
urllib.urlretrieve(url = fileurl, filename = file, reporthook = progBar)
Progbar 是我的 Tkinter GUI 窗口上的进度条。当我在 Windows 上运行我的代码时,下载工作正常并且运行正常,进度条也是如此。
但是,当我在 Mac 上运行相同的代码时,只有在 Tkinter GUI 窗口中有活动时,下载和进度条才会继续。例如,如果窗口在后台,下载将暂停,直到单击该窗口。即使这样,当 Tkinter GUI 窗口不在后台时,只有当我在屏幕上移动鼠标或反复按下键盘上的按钮等操作时,下载才会进行,否则下载会再次暂停。似乎由于某种原因它超时了,我不知道如何解决这个问题或者为什么它只发生在 Mac 而不是 Windows 上。
如果我在 progBar 方法中加入 print 语句,下载也会变慢。
我还尝试从对 urllib.urlretrieve 的调用中删除 reporthook 参数,当我这样做时,下载进展顺利。
我的 progBar 方法如下:
def progBar(blocks, blocksize, totalsize) :
global pb
bytesdownloaded = blocksize*blocks
mbdownloaded = bytesdownloaded/1024/1024
mbsize = float(blocksize)/float(totalsize)
totalsize = totalsize/1024/1024
percent = mbsize*100
global v
va.set("(" + str(mbdownloaded) + 'MB out of ' + str(totalsize) + 'MB)')
pb.step(percent)
如果这有帮助,我正在使用 Python 2.7。
编辑:有关更多信息,下载(对 urllib.urlretrieve 的调用)在后台线程中执行,而 GUI 窗口是主线程。这可能与问题有关。