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