Я бы сделал что-то вроде следующего, которое было протестировано и работает на Python 3.7 Windows.
Одна из причин, по которой он, вероятно, не работал для вас, заключается в том, что вы отключили индикатор выполнения bar = tqdm(total=self.maxValue,desc='Loading:',disable=True)
, но затем вы попытались включить его с помощью a.progressBar.disable=False
, но созданный вами класс не содержит атрибут отключения.
Чтобы обернуть это вокруг чего-либо, оно должно быть повторяемым, как показано в коде, который я разместил. Вам, вероятно, не нужен код time.sleep()
, я просто поместил его там, чтобы вы могли видеть индикатор выполнения в действии, иначе он закончился бы слишком быстро.
Также обычно не рекомендуется помещать операторы импорта в класс. Если ваш модуль всегда будет импортировать другой модуль, импорт должен быть размещен в самом верху в соответствии с PEP 8.
РЕДАКТИРОВАТЬ: Если вы хотите, чтобы индикатор выполнения выполнялся только после некоторого условия, поместите вызов update()
, вложенный после условия, как показано ниже.
from tqdm import tqdm
import time
class ProgressBar(object): # Python3+ '(object)' can be omitted
def __init__(self, max_value, disable=True):
self.max_value = max_value
self.disable = disable
self.p = self.pbar()
def pbar(self):
return tqdm(
total=self.max_value,
desc='Loading: ',
disable=self.disable
)
def update(self, update_value):
self.p.update(update_value)
def close(self):
self.p.close()
max_val = 1000
some_condition = True
p = ProgressBar(max_value=max_val, disable=False)
if some_condition:
for i in range(max_val):
time.sleep(0.01)
p.update(1)
p.close()
Вы также можете сделать то же самое, что и выше, но без создания собственного класса и сокращения количества кода.
from tqdm import tqdm
import time
max_val = 1000
some_condition = True
p = tqdm(total=max_val, disable=False)
if some_condition:
for i in range(max_val):
time.sleep(0.01)
p.update(1)
p.close()