Индикаторы выполнения используются, чтобы дать пользователю визуальную индикацию длительного процесса. Виджет gtk.ProgressBar можно использовать в двух режимах — в процентном режиме и в режиме активности.
Когда можно точно оценить объем ожидаемой работы, индикатор выполнения может использоваться в процентном режиме, и пользователь видит добавочную панель, отображающую процент выполненного задания. Если, с другой стороны, объем работы, подлежащей выполнению, может быть точно определен, индикатор выполнения используется в режиме активности, в котором панель отображает активность, отображая блок, перемещающийся вперед и назад.
Следующий конструктор инициализирует виджет класса gtk.ProgressBar —
pb = gtk.ProgressBar()
gtk.ProgressBar использует следующие методы для управления функциональностью —
-
ProgressBar.pulse () — это подталкивает индикатор выполнения, чтобы показать, что был достигнут некоторый прогресс, но вы не знаете, сколько. Этот метод также изменяет режим индикатора выполнения на «режим активности», когда блок подпрыгивает вперед и назад.
-
ProgressBar.set_fraction (фракция) — это заставляет индикатор выполнения «заполнять» часть бара, заданную дробью . Значение дроби должно быть между 0,0 и 1,0.
-
ProgressBar.set_pulse_setup () — устанавливает часть (указанную в виде дроби ) общей длины индикатора выполнения для перемещения подпрыгивающего блока при каждом вызове метода pulse () .
-
ProgressBar.set_orientation () — устанавливает ориентацию индикатора выполнения. Может быть установлена одна из следующих констант:
-
gtk.PROGRESS_LEFT_TO_RIGHT
-
gtk.PROGRESS_RIGHT_TO_LEFT
-
gtk.PROGRESS_BOTTOM_TO_TOP
-
gtk.PROGRESS_TOP_TO_BOTTOM
-
ProgressBar.pulse () — это подталкивает индикатор выполнения, чтобы показать, что был достигнут некоторый прогресс, но вы не знаете, сколько. Этот метод также изменяет режим индикатора выполнения на «режим активности», когда блок подпрыгивает вперед и назад.
ProgressBar.set_fraction (фракция) — это заставляет индикатор выполнения «заполнять» часть бара, заданную дробью . Значение дроби должно быть между 0,0 и 1,0.
ProgressBar.set_pulse_setup () — устанавливает часть (указанную в виде дроби ) общей длины индикатора выполнения для перемещения подпрыгивающего блока при каждом вызове метода 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.0 методом set_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
Движение вперед-назад блока внутри индикатора выполнения покажет ход действия.