我正在用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窗口)没有响应的情况下下载文件?你知道吗
使用单独的线程进行I/O是正确的。这可能不起作用,因为需要从主线程更新UI。尝试更改
report()
以将该信息保存在一个结构中,供UI线程稍后检查。你知道吗相关问题 更多 >
编程相关推荐