Индикаторы прогресса используются для того, чтобы показать текущее состояние операции. Они весьма просты в использовании, и вы увидите это в коде ниже. Но давайте сначала рассмотрим вызов для создания нового индикатора прогресса.
progressbar = gtk.ProgressBar(adjustment=None) |
Аргумент adjustment указывает регулятор используемый с progressbar. Если он не указан, то будет создан новый. Теперь, когда индикатор прогресса создан, мы можем использовать его.
progressbar.set_fraction(fraction) |
Объект progressbar это объект индикатора загрузки, которым вы хотите управлять, и аргумент (fraction) это количество “выполнения”, т.е. процент заполнения индикатора с 0 до 100%. Данные передаются методу в виде действительного числа в диапазоне от 0 до 1.
Индикатор прогресса может выбрать одно из направлений, используя метод:
progressbar.set_orientation(orientation) |
Аргумент orientation может принимать одно из следующих значений для указания направления заполнения индикатора прогресса:
PROGRESS_LEFT_TO_RIGHT PROGRESS_RIGHT_TO_LEFT PROGRESS_BOTTOM_TO_TOP PROGRESS_TOP_TO_BOTTOM |
Также как показ количества прогресса , индикатор может использоваться для отображения активности в приложении. Это может быть полезным в ситуациях, где индикатор прогресса плохо соотносится с диапазоном значений. Следующая функция показывает то, как может отображаться продвижение в прогрессе:
progressbar.pulse() |
Размер шага индикатора активности может быть установлен следующей функцией, где fraction находится между 0.0 и 1.0.
progressbar.set_pulse_step(fraction) |
При отсутствии активности индикатор прогресса также может отображать настраиваемую строку текста, используя следующий метод:
progressbar.set_text(text) |
Замечание
Учтите, что set_text() не поддерживает форматирование в стиле printf() для GTK+ 1.2 Progressbar.
Вы можете отключить отображение строки, вызвав set_text() ещё раз, без аргумента.
Текущая строка с индикатором прогресса может быть получена методом:
text = progressbar.get_text() |
Индикаторы прогресса обычно используются для отображения прерываний или других подобных функций (см. Глава 19, Прерывания, IO и бездействующие функции) для создания иллюзии многозадачности. Используются методы set_fraction() или pulse() тем же образом.
Программа progressbar.py предоставляет пример использования индикатора прогресса, используя прерывания. Этот код также показывает как сбрасывать индикатор прогресса. Рисунок 9.4, “Пример индикатора прогресса” показывает получаемое окно:
Исходный код для progressbar.py:
#!/usr/bin/env python # -*- coding:utf-8 -*- # example progressbar.py import pygtk pygtk.require('2.0') import gtk, gobject # Обновляем значение индикатора прогресса # для получения какого-то движения def progress_timeout(pbobj): if pbobj.activity_check.get_active(): pbobj.pbar.pulse() else: # Рассчитываем значение индикатора прогресса, используя # установку диапазона значений в регуляторе new_val = pbobj.pbar.get_fraction() + 0.01 if new_val > 1.0: new_val = 0.0 # Устанавливаем новое значение pbobj.pbar.set_fraction(new_val) # Т.к. это функция-прерывание, возвращаем TRUE # для того чтобы функция продолжала вызываться return True class ProgressBar: # Callback который переключает отображение текста # на индикаторе прогресса def toggle_show_text(self, widget, data=None): if widget.get_active(): self.pbar.set_text("текст индикатора") else: self.pbar.set_text("") # Callback который переключает режим активности # в индикаторе прогресса def toggle_activity_mode(self, widget, data=None): if widget.get_active(): self.pbar.pulse() else: self.pbar.set_fraction(0.0) # Callback который переключает направление индикатора прогресса def toggle_orientation(self, widget, data=None): if self.pbar.get_orientation() == gtk.PROGRESS_LEFT_TO_RIGHT: self.pbar.set_orientation(gtk.PROGRESS_RIGHT_TO_LEFT) elif self.pbar.get_orientation() == gtk.PROGRESS_RIGHT_TO_LEFT: self.pbar.set_orientation(gtk.PROGRESS_LEFT_TO_RIGHT) # Очищаем выделенную память и удаляем таймер def destroy_progress(self, widget, data=None): gobject.source_remove(self.timer) self.timer = 0 gtk.main_quit() def __init__(self): self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_resizable(True) self.window.connect("destroy", self.destroy_progress) self.window.set_title("ProgressBar") self.window.set_border_width(0) vbox = gtk.VBox(False, 5) vbox.set_border_width(10) self.window.add(vbox) vbox.show() # Создаём объект выравнивания по центру align = gtk.Alignment(0.5, 0.5, 0, 0) vbox.pack_start(align, False, False, 5) align.show() # Создаём индикатор прогресса self.pbar = gtk.ProgressBar() align.add(self.pbar) self.pbar.show() # Добавляем callback timer для обновления значения индикатора прогресса self.timer = gobject.timeout_add (100, progress_timeout, self) separator = gtk.HSeparator() vbox.pack_start(separator, False, False, 0) separator.show() # Строки, колонки, однородность. table = gtk.Table(2, 2, False) vbox.pack_start(table, False, True, 0) table.show() # И переключатель для выбора отображения текста check = gtk.CheckButton("Показать текст") table.attach(check, 0, 1, 0, 1, gtk.EXPAND | gtk.FILL, gtk.EXPAND | gtk.FILL, 5, 5) check.connect("clicked", self.toggle_show_text) check.show() # Добавляем переключатель для выбора режима активности self.activity_check = check = gtk.CheckButton("Режим активации") table.attach(check, 0, 1, 1, 2, gtk.EXPAND | gtk.FILL, gtk.EXPAND | gtk.FILL, 5, 5) check.connect("clicked", self.toggle_activity_mode) check.show() # И переключатель для смены направлений check = gtk.CheckButton("Справа налево") table.attach(check, 0, 1, 2, 3, gtk.EXPAND | gtk.FILL, gtk.EXPAND | gtk.FILL, 5, 5) check.connect("clicked", self.toggle_orientation) check.show() # Добавляем кнопку выхода button = gtk.Button("close") button.connect("clicked", self.destroy_progress) vbox.pack_start(button, False, False, 0) # Это делает кнопку кнопкой по умолчанию. button.set_flags(gtk.CAN_DEFAULT) # Заставляет кнопку быть кнопкой по умолчанию. Простое нажатие # кнопки "Enter" вызовет нажатие кнопки. button.grab_default () button.show() self.window.show() def main(): gtk.main() return 0 if __name__ == "__main__": ProgressBar() main()
Предыдущая страница | На уровень выше | Следующая страница |
9.3. Всплывающие подсказки (gtk.Tooltips) | К оглавлению | 9.5. Диалог (gtk.Dialog) |