2

首先,我必须告诉你我是法国人。如果我犯了一些错误,请原谅我。

我正在尝试创建一个简单的程序,其中我有一个输入、一个按钮和一个进度条(以及一些以 KB/s 表示输出的标签,用户尝试下载的文件的重量......)

我看到了几个关于它的主题,但由于我是新手,我不知道如何才能看到我的 ProgressBar 进化,并且我的程序在文件下载之前不会冻结。

我特别看到了这个主题,但是当我执行 GUI 脚本时,我遇到了这个错误:“堆栈空间不足...... ”显然是由于 Event()。

我想我必须使用 Thread 但我不知道如何。有人可以解释一下吗?

这是我写的:

    从 tkinter 导入 *
    导入 urllib.request
    进口时间
    导入系统
    导入ttk
    从线程导入事件,线程

    类 Telecharger(对象):
        """Evalue l'expression (url ou code) et télécharge le fichier du site concerné"""
        def __init__(self):
            sd = str(主菜1.get())
            urllib.request.urlretrieve(sd, "mymovie.mp4", Telecharger.reporthook)


        def reporthook(count, block_size, total_size):
            全局开始时间
            如果计数 == 0:
                start_time = time.time()
                时间.sleep(1)
                返回
            def guiloop():
                # 信息出现在控制台
                持续时间 = time.time() - start_time
                progress_size = int(count * block_size)
                speed = int(progress_size / (1024 * duration))
                百分比 = int(count * 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(speed) + "KB/s")

            线程(target=guiloop).start()

    分 = Tk()
    fen.withdraw()
    fen.title("测试")

    cadre1 = Frame(fen, width = 400, height = 80).pack(side = TOP)

    标签(cadre1, text='Downloader').place(y = 25, width = 400)
    标签(cadre1, text='URL : ').place(y = 50, width = 120)

    entree1 = 入口(cadre1,bd='5')
    entree1.bind("", Telecharger)
    entree1.place(x = 120, y = 50, 宽度 = 200)

    Button(cadre1, text='Go', command = Telecharger).place(x = 330, y = 50, width = 50)

    cadrProgress = Frame(fen, width = 400, height = 60).pack()
    barreProgression = ttk.Progressbar(fen, length=260, orient="horizo​​ntal", mode="determinate")
    barreProgression.place(y = 100,x = 10,宽度 = 200)
    chaine = 标签(fen, text="poids : 0 MB, vitesse = 0 KB/s")
    chaine.place(y = 100,x = 220,宽度 = 170)
    fen.after(500, fen.deiconify)

    fen.mainloop()

祝你有美好的一天谢谢

4

0 回答 0