Используя тот же самый прогресс в tkinter для нескольких вычислений в Python

Я хочу знать, как наилучший метод использовать тот же самый прогресс (определенный и неопределенный). В этом примере тот же самый прогрессбар используется для неопределенного, для детерминированного и неопределенного вычисления функций. Когда я запускаю код, отображается только последний индикатор прогресса.

from Tkinter import * import ttk import tkFileDialog import time def foo(m, n, self_from_class): for i in xrange(m): i * n self_from_class.pbar_f.step(1) self_from_class.update() time.sleep(0.1) return i class MainWindow(Frame): def __init__(self): Frame.__init__(self) self.master.title("ProgressBar example") self.master.minsize(200, 100) self.grid(sticky=E+W+N+S) top = self.winfo_toplevel() top.rowconfigure(0, weight=1) top.columnconfigure(0, weight=1) self.start = Button(self, text='Start', command=self.start, activeforeground="red") self.start.grid(row=0, column=0, pady=2, padx=2, sticky=E+W+N+S) self.pbar_ind = ttk.Progressbar(self, orient="horizontal", length=300, mode="indeterminate") self.pbar_ind.grid(row=1, column=0, pady=2, padx=2, sticky=E+W+N+S) self.pbar_det = ttk.Progressbar(self, orient="horizontal", length=300, mode="determinate") self.pbar_det.grid(row=1, column=0, pady=2, padx=2, sticky=E+W+N+S) self.pbar_f = ttk.Progressbar(self, orient="horizontal", length=300, mode="indeterminate") self.pbar_f.grid(row=1, column=0, pady=2, padx=2, sticky=E+W+N+S) def start(self): for i in xrange(10): self.pbar_ind.step(1) self.update() # Busy-wait time.sleep(0.1) for i in xrange(10): self.pbar_ind.step(1) self.update() # Busy-wait time.sleep(0.1) res = foo(10, 2, self) if __name__=="__main__": d = MainWindow() d.mainloop() 

UPDATE – мое изящное решение:

 class MainWindow(Frame): def __init__(self): Frame.__init__(self) self.master.title("ProgressBar example") self.master.minsize(200, 100) self.grid(sticky=E+W+N+S) top = self.winfo_toplevel() top.rowconfigure(0, weight=1) top.columnconfigure(0, weight=1) self.start = Button(self, text='Start', command=self.start, activeforeground="red") self.start.grid(row=0, column=0, pady=2, padx=2, sticky=E+W+N+S) self.pbar_f = ttk.Progressbar(self, orient="horizontal", length=300, mode="indeterminate") self.pbar_det = ttk.Progressbar(self, orient="horizontal", length=300, mode="determinate") self.pbar_ind = ttk.Progressbar(self, orient="horizontal", length=300, mode="indeterminate") self.pbar_ind.grid(row=1, column=0, pady=2, padx=2, sticky=E+W+N+S) def start(self): for i in xrange(10): self.pbar_ind.step(1) self.update() # Busy-wait time.sleep(0.1) self.pbar_ind.grid_forget() self.pbar_det.grid(row=1, column=0, pady=2, padx=2, sticky=E+W+N+S) for i in xrange(10): self.pbar_det.step(1) self.update() # Busy-wait time.sleep(0.1) self.pbar_det.grid_forget() self.pbar_f.grid(row=1, column=0, pady=2, padx=2, sticky=E+W+N+S) res = foo(10, 2, self) 

One Solution collect form web for “Используя тот же самый прогресс в tkinter для нескольких вычислений в Python”

Если вы поместите все виджеты в одну cell – они имеют одинаковый column и row – тогда вы ставите их друг над другом. Последний находится наверху, и вы видите его.

Вы можете использовать только один виджет Progressbar – для всех вычислений.

У вас может быть несколько Progressbar s и использовать grid/grid_forget чтобы показать их и скрыть чужие.

Вы можете поставить Progressbar s в разные ячейки и все на экране.


РЕДАКТИРОВАТЬ:

пример с grid_forget

 from Tkinter import * #----------------------------------- def on_press(): global visible if visible == 1: l1.grid_forget() l3.grid(row=0,column=3) visible = 3 else: l1.grid(row=0,column=0) l3.grid_forget() visible = 1 #----------------------------------- master = Tk() l1 = Button(master, text='press there >>') l1.grid(row=0,column=0) l2 = Button(master, text='change', command=on_press) l2.grid(row=0,column=1) l3 = Button(master, text='<< press there') #l3.grid(row=0,column=3) visible = 1 master.mainloop() 
  • Вход IOError переполнен: запись звука с помощью интерфейса Tkinter
  • Tkinter, выполняющий функции с течением времени
  • Ориентация метки Python tkinter
  • Создание LabelFrame внутри холста Tkinter
  • Проблемы с tk85.dll при отключении приложения, в которое встроен интерпретатор Python
  • Проблема с заполнением Python Tkinter
  • Как закодировать модуль tkinter «scrolledtext»
  • Python: привлекательная, чистая, упакованная Windows GUI-библиотека
  • Python - лучший язык программирования в мире.