urllib.urlretrieve使GUI窗口无响应

时间:2016-08-07 01:30:08

标签: python python-2.7 user-interface downloading

我正在使用Panda3D制作游戏,而我正在制作下载程序以下载最新更新。如果您不知道Panda3D是什么,请想象我正在谈论的GUI作为Tkinter窗口:P。我使用的功能是:

def doDownload():
    urllib.urlretrieve("http://hiddenfile/hi.txt", "hi.txt", reporthook=report)

def report(count, blockSize, totalSize):
    percent = int(count*blockSize*100/totalSize)
    gui.downloadBar['value'] = percent

然而,这使得GUI窗口没有响应,但控制台窗口很好。如果它没有响应,用户会认为它被卡住并结束其进程,并且他们的游戏数据将被破坏。我试过在单独的线程上运行,像这样:

def doDownload():
    threading.Thread(target=__doDownload).start()

def __doDownload():
    urllib.urlretrieve("http://hiddenfile/hi.txt", "hi.txt", reporthook=report)

def report(count, blockSize, totalSize):
    percent = int(count*blockSize*100/totalSize)
    gui.downloadBar['value'] = percent

但是甚至没有下载它。有没有办法下载文件,没有窗口(例如Tkinter窗口)没有响应?

1 个答案:

答案 0 :(得分:0)

您使用单独的线程进行I / O操作正确。它可能无法正常工作,因为您需要从主线程更新UI。尝试更改report()以将该信息保存在以后可由UI线程检查的结构中。