J'ai un simple TK gui et un long processus dans une fonction attachée à un bouton et je veux une barre de progression lorsque je clique sur le bouton. Je veux une barre de progression, je clique sur le bouton, tout comme elle démarre un long proc avec beaucoup, beaucoup de ligne de code
comment puis je faire ça? ici le code:
from tkinter import Button, Tk, HORIZONTAL
from tkinter.ttk import Progressbar
import time
class MonApp(Tk):
def __init__(self):
super().__init__()
bt1 = Button(self, text='Traitement', command=self.traitement)
bt1.grid()
self.progress = Progressbar(self, orient=HORIZONTAL,length=100, mode='indeterminate')
self.progress.grid()
self.progress.grid_forget()
def traitement(self):
self.progress.grid()
self.progress.start()
time.sleep(15)
## Just like you have many, many code lines...
self.progress.stop()
if __name__ == '__main__':
app = MonApp()
app.mainloop()
J'ai essayé beaucoup de choses, mais je n'ai pas trouvé comment.
Comment puis-je mettre une barre de progression dans cette application?
Tu peux trouver ttk.Progressbar
à tkdocs
from tkinter import *
from tkinter.ttk import *
tk=Tk()
progress=Progressbar(tk,orient=HORIZONTAL,length=100,mode='determinate')
def bar():
import time
progress['value']=20
tk.update_idletasks()
time.sleep(1)
progress['value']=50
tk.update_idletasks()
time.sleep(1)
progress['value']=80
tk.update_idletasks()
time.sleep(1)
progress['value']=100
progress.pack()
Button(tk,text='foo',command=bar).pack()
mainloop()
Il est préférable d'utiliser threading
et d'exécuter votre code dans un autre thread.
Comme ça:
from tkinter import Button, Tk, HORIZONTAL
from tkinter.ttk import Progressbar
import time
import threading
class MonApp(Tk):
def __init__(self):
super().__init__()
self.btn = Button(self, text='Traitement', command=self.traitement)
self.btn.grid(row=0,column=0)
self.progress = Progressbar(self, orient=HORIZONTAL,length=100, mode='indeterminate')
def traitement(self):
def real_traitement():
self.progress.grid(row=1,column=0)
self.progress.start()
time.sleep(5)
self.progress.stop()
self.progress.grid_forget()
self.btn['state']='normal'
self.btn['state']='disabled'
threading.Thread(target=real_traitement).start()
if __name__ == '__main__':
app = MonApp()
app.mainloop()