まず第一に、私はフランス人であることを言わなければなりません。ですから、間違っていたら許してください。
入力、ボタン、プログレスバー(および出力をKB /秒で示すいくつかのラベル、ユーザーがダウンロードしようとするファイルの重量...)を持つ単純なプログラムを作成しようとしています。
いくつかのトピックを見ましたが、私は初心者なので、ProgressBar が進化し、ファイルがダウンロードされるまでプログラムがフリーズしないようにする方法がわかりません。
特にこのトピックが表示されますが、GUI スクリプトを実行すると、次のエラーが表示されます。
Thread を使用する必要があると思いますが、方法がわかりません。誰か説明してくれませんか。
ここに私が書いたものがあります:
tkinterインポートから* urllib.request をインポート 輸入時間 システムをインポート ttk をインポート from threading import イベント、スレッド クラス Telecharger(オブジェクト): """Evalue l'expression (url ou code) et télécharge le fichier du site Concerné""" def __init__(自己): sd = str(前菜1.get()) urllib.request.urlretrieve(sd, "mymovie.mp4", Telecharger.reporthook) def reporthook (カウント、block_size、total_size): グローバル start_time カウント == 0 の場合: start_time = time.time() 時間.スリープ(1) 戻る デフォルトギループ(): # コンソールに表示される情報 期間 = time.time() - start_time progress_size = int(count * block_size) 速度 = int(progress_size / (1024 * 期間)) パーセント = int(カウント * block_size * 100 / total_size) sys.stdout.write("\r...%d%%, %d MB, %d KB/s, %d 秒経過" % (パーセント, total_size / (1024 * 1024), 速度, 期間)) sys.stdout.flush() # ProgressBar は進化しません :( barreProgression["値"] = パーセント chaine.configure(text = str(速度) + "KB/s") スレッド (ターゲット = guiloop).start() フェン = Tk() fen.withdraw() fen.title("テスト") cadre1 = Frame(fen, width = 400, height = 80).pack(side = TOP) Label(cadre1, text='Downloader').place(y = 25, width = 400) Label(cadre1, text='URL : ').place(y = 50, width = 120) entree1 = Entry(cadre1, bd='5') entree1.bind("", Telecharger) 前菜1.場所(x = 120、y = 50、幅 = 200) Button(cadre1, text='Go', command = Telecharger).place(x = 330, y = 50, width = 50) cadrProgress = Frame(フェン、幅 = 400、高さ = 60).pack() barreProgression = ttk.Progressbar(fen, length=260, orient="horizontal", mode="determinate") barreProgression.place(y = 100, x = 10, 幅 = 200) chaine = Label(fen, text="poids: 0 MB, vitesse = 0 KB/s") chaine.place(y = 100, x = 220, 幅 = 170) fen.after(500, fen.deiconify) フェン.メインループ()
良い一日をありがとう