Вам необходимо обновить индикатор выполнения с помощью шага или набора или изменить значение переменной IntVar, которая прикреплена к индикатору выполнения.
Это может помочь.В этом примере запускается главное окно, в котором можно открыть несколько индикаторов выполнения, которые увеличиваются в цикле с помощью автоматического метода.В этом небольшом примере ваш цикл сроков служит цели автоматического метода.
импорт tkinter как tk из tkinter import ttk import time
class 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)
classpbar_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 ':
main_window()