[英]How to update Ttk.Progressbar in Python?
我有一個siplme GUI,它執行一些耗時的操作。 我想制作一個進度條,在每個操作之后都會更新。 但是,似乎不可能完成。
沒有使用update或update_idletask的解決方案有效(或者我以錯誤的方式使用了它)。 因此,目標是在每次循環迭代中更新進度條。 而.after()的解決方案在這里不適合,因為該功能是通過單擊按鈕運行的。
樣例代碼:
from tkinter import *
from tkinter.ttk import Progressbar
from time import sleep
def RunThat():
global pb
for i in range(0,101,10):
pb["value"]=i
pb.update() #this works
sleep(0.1)
print(i)
master=Tk()
Label(master,text="Doing something...").grid(row=0,column=0,pady=10)
Grid.columnconfigure(master,0,weight=1)
Label(master,text="Progress:",justify=LEFT).grid(row=1,column=0,padx=25,pady=2,sticky=W+S)
Grid.rowconfigure(master,1,weight=1)
pb=Progressbar(master)
pb.grid(row=2,column=0,padx=25,pady=2,sticky=W+E)
pb["maximum"]=100
pb["value"]=0
Button(master,text="Do it",command=RunThat).grid(row=3,column=0,padx=5,pady=5)
master.mainloop()
毫無疑問,進度條更新的唯一方法是運行事件循環,以便它可以為請求重畫的事件提供服務。 當您要求應用程序進入睡眠狀態或具有長時間運行的功能時,事件循環將無法為請求提供服務。
這意味着您必須調用update
或update_idletasks
,重構長期運行的函數以使用事件循環,或者您需要在單獨的進程或線程中運行此函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.