2

まず第一に、私はフランス人であることを言わなければなりません。ですから、間違っていたら許してください。

入力、ボタン、プログレスバー(および出力を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="horizo​​ntal", 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)

    フェン.メインループ()

良い一日をありがとう

4

0 に答える 0