首先,我必须告诉你我是法国人。如果我犯了一些错误,请原谅我。
我正在尝试创建一个简单的程序,其中我有一个输入、一个按钮和一个进度条(以及一些以 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="horizontal", 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()
祝你有美好的一天谢谢