Tkinter gui with progress bar

I have a simple TK gui and a lengthy process in a function attached to a button, and I want a progress bar when I click on the button. I want the progress bar to go, I click on the button, just like I start a long trial with a lot of code lines

How can i do this? here is the 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() 

I tried many things, but I did not find how to do this.

How can I put a progress bar in this application?

+6
source share
1 answer

You can find ttk.Progressbar in 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() 

It is better to use threading and run your code in another thread.

Like this:

 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() 
+8
source

All Articles