0
私はPanda3Dを使用してゲームを作っています。私は現在最新のアップデートをダウンロードするダウンローダーを作っています。 Panda3Dが何であるかわからない場合は、私がTkinterウィンドウとして話しているGUIを想像してください:P。私が使用する関数は、以下のとおりです。urllib.urlretrieveはGUIウィンドウに反応しません
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ウィンドウが応答しなくなり、まだコンソールウィンドウで結構です。それが応答しない場合、ユーザーはそれが固まってプロセスを終了し、それらのgamedataが破損すると考えられます。私はこのように別々のスレッドで実行しようとしました:
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ウィンドウ)が反応しなくても、ファイルをダウンロードする方法はありますか?
別のスレッドではダウンロードされません。私は 'print(progress)'をレポート関数に追加しようとしましたが、それは印刷されませんでした。たとえダウンロードプロセスが開始された後であっても、私がそれを実行していたフォルダで見ることができなかったので、ファイルをダウンロードしなかったことは言うまでもありません。 – Developre
インタープリタで2番目のスニペットを実行してdoDownload()を呼び出すと、doDownload()が実行され、ダウンロードされます。申し訳ありませんが、あなたの環境についてよく分かりません。スレッドの問題を生成する完全な実行可能な例が、多少の答えを得るのに役立つでしょう。 –