PyGTK - класс ProgressBar

Индикаторы выполнения используются, чтобы дать пользователю визуальную индикацию длительного процесса. Виджет gtk.ProgressBar можно использовать в двух режимах - процентном режиме и режиме активности.

Когда есть возможность точно оценить, какой объем работы ожидает завершения, индикатор выполнения можно использовать в процентном режиме, и пользователь видит постепенную шкалу, показывающую процент выполненного задания. Если, с другой стороны, объем работы, которую необходимо выполнить, можно точно определить, индикатор выполнения используется в режиме активности, в котором полоса показывает активность, отображая блок, перемещающийся вперед и назад.

Следующий конструктор инициализирует виджет класса gtk.ProgressBar:

pb = gtk.ProgressBar()

gtk.ProgressBar использует следующие методы для управления функциональностью:

  • ProgressBar.pulse()- Это подталкивает индикатор выполнения, чтобы указать, что был достигнут некоторый прогресс, но вы не знаете, насколько. Этот метод также меняет режим индикатора выполнения на «режим активности», когда блок подпрыгивает вперед и назад.

  • ProgressBar.set_fraction(fraction) - Это приводит к тому, что индикатор выполнения "заполняет" часть полосы, указанную fraction. Значениеfraction должно быть от 0,0 до 1,0.

  • ProgressBar.set_pulse_setup() - Устанавливает часть (указанную fraction) от общей длины индикатора выполнения, чтобы переместить отскакивающий блок для каждого вызова в pulse() метод.

  • ProgressBar.set_orientation()- Устанавливает ориентацию индикатора выполнения. Это может быть одна из следующих констант:

    • gtk.PROGRESS_LEFT_TO_RIGHT

    • gtk.PROGRESS_RIGHT_TO_LEFT

    • gtk.PROGRESS_BOTTOM_TO_TOP

    • gtk.PROGRESS_TOP_TO_BOTTOM

В следующей программе виджет gtk.ProgressBar используется в режиме активности. Следовательно, начальная позиция прогресса установлена ​​на 0,0set_fraction() метод.

self.pb = gtk.ProgressBar()
self.pb.set_text("Progress")
self.pb.set_fraction(0.0)

Чтобы увеличить прогресс на 1 процент через 100 миллисекунд, объявляется объект таймера и настраивается функция обратного вызова, которая будет вызываться через каждые 100 мс, так что индикатор выполнения обновляется.

self.timer = gobject.timeout_add (100, progress_timeout, self)

Вот, progress_timeout()это функция обратного вызова. Он увеличивает параметрset_fraction() метод на 1 процент и обновляет текст в индикаторе выполнения, чтобы показать процент выполнения.

def progress_timeout(pbobj):
   new_val = pbobj.pb.get_fraction() + 0.01
   pbobj.pb.set_fraction(new_val)
   pbobj.pb.set_text(str(new_val*100)+" % completed")
   return True

пример

Обратите внимание на следующий код -

import gtk, gobject
   
def progress_timeout(pbobj):
   new_val = pbobj.pb.get_fraction() + 0.01
   pbobj.pb.set_fraction(new_val)
   pbobj.pb.set_text(str(new_val*100)+" % completed")
   return True

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Progressbar demo")
      self.set_size_request(300,200)
      self.set_position(gtk.WIN_POS_CENTER)
		
      fix = gtk.Fixed()
      self.pb = gtk.ProgressBar()
      self.pb.set_text("Progress")
      self.pb.set_fraction(0.0)
		
      fix.put(self.pb,80,100)
      self.add(fix)
      self.timer = gobject.timeout_add (100, progress_timeout, self)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
PyApp()
gtk.main()

Приведенный выше код сгенерирует следующий вывод -

Чтобы использовать индикатор выполнения в режиме активности, измените функцию обратного вызова на следующую и запустите -

def progress_timeout(pbobj):
   pbobj.pb.pulse()
   return True

Движение блока внутри индикатора выполнения вперед и назад будет показывать прогресс действия.