我正在使用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窗口)没有响应?
答案 0 :(得分:0)
您使用单独的线程进行I / O操作正确。它可能无法正常工作,因为您需要从主线程更新UI。尝试更改report()
以将该信息保存在以后可由UI线程检查的结构中。