我有一个简单的 Tk GUI 和一个附加到按钮的功能的漫长过程。当我点击按钮时,我想要一个进度条,就像它开始了一个漫长的过程。
我该怎么做?这是我当前的代码:
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()
如何在该应用程序中放置进度条?
最佳答案
您可以在 tkdocs 找到 ttk.Progressbar
import time
from tkinter import *
from tkinter.ttk import *
tk = Tk()
progress = Progressbar(tk, orient=HORIZONTAL, length=100, mode='determinate')
def bar():
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
并在另一个线程中运行您的代码。
像这样:
import threading
import time
from tkinter import Button, Tk, HORIZONTAL
from tkinter.ttk import Progressbar
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()
关于python - 带进度条的 Tkinter GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33768577/