Tkinter GUI与进度栏
发布于 2021-01-29 15:22:47
我在按钮上附加了一个简单的TK gui和一个漫长的过程,并且单击按钮时需要一个进度条。我想要一个进度条,我单击按钮,就像它启动包含许多代码行的长proc一样
我怎样才能做到这一点?这里的代码:
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()
我已经尝试了很多东西,但是我还没有找到方法。
如何在该应用中放置进度栏?
关注者
0
被浏览
42
1 个回答
-
您可以
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()
最好
threading
在另一个线程中使用和运行代码。像这样:
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()