簡體   English   中英

如何在Python中更新Ttk.Progressbar?

[英]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()

毫無疑問,進度條更新的唯一方法是運行事件循環,以便它可以為請求重畫的事件提供服務。 當您要求應用程序進入睡眠狀態或具有長時間運行的功能時,事件循環將無法為請求提供服務。

這意味着您必須調用updateupdate_idletasks ,重構長期運行的函數以使用事件循環,或者您需要在單獨的進程或線程中運行此函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM