您需要使用步驟或設置更新進度欄,或者更改附加到進度欄的IntVar變量的值。
這可能有幫助。本示例啓動一個主窗口,該窗口可以打開多個進度條 ,這些進度條通過自動方法在循環中遞增。在這個小例子中,您的截止日期循環服務於自動方法的目的。
進口Tkinter的傳統知識 從Tkinter的進口TTK 進口時間
類main_window:
def __init__(self):
self.pbars = []
self.parent = tk.Tk()
self.parent.title('multiprocessing progess bar')
frame = ttk.Labelframe(self.parent)
frame.pack(pady=10, padx=10)
btn = tk.Button(frame, text="Cancel")
btn.bind("<Button-1>", self.cancel)
btn.grid(row=0, column=1, pady=10)
btn = tk.Button(frame, text="progress_bar")
btn.bind("<Button-1>", self.pbar)
btn.grid(row=0, column=2, pady=10)
btn = tk.Button(frame, text="increment")
btn.bind("<Button-1>", self.increment)
btn.grid(row=0, column=3, pady=10)
self.parent.mainloop()
def pbar(self, event):
count= len(self.pbars)
name="producer %d" % count
print (count*10)
self.pbars.append(pbar_dialog(self.parent, title=name, count=count*10))
pbar.automatic()
def cancel(self, event):
self.parent.destroy()
def increment(self, event):
for pbar in self.pbars:
pbar.step(10)
類pbar_dialog:
toplevel=None
pbar_count = 0
def __init__(self, parent, count=0, title=None):
self.pbar_value = count
self.title=title
pbar_dialog.pbar_count += 1
if not pbar_dialog.toplevel:
pbar_dialog.toplevel= tk.Toplevel(parent)
self.frame = ttk.Labelframe(pbar_dialog.toplevel, text=title)
#self.frame.pack()
self.pbar = ttk.Progressbar(self.frame, length=300, variable=self.pbar_value)
self.pbar.grid(row=0, column=1, columnspan=2, padx=5, pady=5)
btn = tk.Button(self.frame, text="Cancel")
btn.bind("<Button-1>", self.cancel)
btn.grid(row=0, column=3, pady=10)
self.frame.pack()
self.pbar.step(count)
def set(self,value):
self.pbar_value=value
def step(self,increment=1):
self.pbar.step(increment)
def cancel(self, event):
self.destroy()
def destroy(self):
self.frame.destroy()
pbar_dialog.pbar_count -= 1
if pbar_dialog.pbar_count == 0:
pbar_dialog.toplevel.destroy()
def automatic(self):
for i in range(self.pbar_value, 100):
time.sleep(1)
#self.step()
print(self.title, i)
self.set(i)
如果名 =='主要 ':
main_window()
可以同時plz幫助我如何在上面的代碼中使用update_idletasks命令?不幸的是,我不是一位編程專家。我只是想爲我所擁有的一個項目製作一個體面的應用程序。謝謝! – AlexTh
@AlexTh:作爲開始,嘗試在循環結束時調用'root.update_idletasks()'(用你稱之爲'Tk'實例的引用來代替'root')。不要在循環後執行它,因爲它在每次迭代中都會被調用。 –
root.update_idletasks不起作用。相反,root.update()在outfile.writelines(outdata)行之後的循環內正常工作。 – AlexTh