Как выйти из цикла?

Я проверяю значение индикатора выполнения, и если оно равно 100, я хочу выйти, чтобы завершенная загрузка не была напечатана дважды. Я не знаю, почему 100 появляется дважды, если я запрашиваю индикатор выполнения.

def callback(self,*args):
  cmds.progressBar('progbar', edit=True, step=1)
  if cmds.progressBar('progbar',q=True, progress=True)==100:
    print "Finished Uploading."
    break

Я нашел похожую тему, но сценарий в моем случае немного отличается...

1 ответ

Решение

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

В любом случае, я написал следующий пример для проверки, и он на самом деле печатает "Законченная загрузка" только один раз, когда достигается 100.

import maya.cmds as cmds

cmds.progressBar('progressBar') # initialise the progress bar

def callback():  
  # Begin loop from 0 to 100 - remember range(n) returns numbers from 0 (inclusive) to n (exclusive)
  for i in range(101):
      cmds.progressBar('progressBar', edit=True, step=1) # increase step by 1
      if (cmds.progressBar('progressBar',q=True, progress=True)==100):
          print "Finished Uploading."
          break
          # Theoretically, breaking is simply here so that you stop wasting iterations in some cases,
          # but it's not necessary for the printout, since we have only specified that the print will
          # happen when the progress value is equal to exactly 100.
          # Finally, if there is NO loop (like the code you pasted originally), then you shouldn't have
          # a break.

callback()

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

К сожалению, я не могу ответить на что-то более конкретное без более конкретной информации с вашей стороны.

Другие вопросы по тегам