Statusbar это простой виджет, используемый для отображения текстового сообщения. Они сохраняют очередь сообщений, помещённых в них, поэтому вытаскивание текущего сообщения из очереди – покажет предыдущее.
Для того, чтобы разные части приложения могли использовать одну строку состояния, виджет Statusbar использует Context Indefiter, который используется для определения разных “пользователей”. Отображается всегда верхнее сообщение, неважно с каким контекстом. Сообщения содержатся не в порядке контекстов, а по принципу Last-in-First-out (стек LIFO).
Для создания строки состояния необходимо вызвать:
statusbar = gtk.Statusbar() |
Для нового идентификатора контекста необходимо использовать следующий метод с коротким текстовым описание контекста:
context_id = statusbar.get_context_id(context_description) |
Также есть три дополнительных метода для работы со строками состояния:
message_id = statusbar.push(context_id, text) statusbar.pop(context_id) statusbar.remove(context_id, message_id) |
Первый, push(), используется для помещения нового сообщения на statusbar. Он возвращает message_id, который может быть использован для удаления сообщения методом remove(), с помощью комбинации message_id и context_id из стека statusbar‘a.
Метод pop() удаляет высшее сообщение с заданным context_id.
Пример statusbar.py создаёт строку состояния и две кнопки, первая помещает сообщения в строку состояния, а вторая удаляет. Рисунок 9.9, “Пример строки состояния” показывает результат:
Исходный код statusbar.py:
#!/usr/bin/env python # -*- coding:utf-8 -*- # example statusbar.py import pygtk pygtk.require('2.0') import gtk class StatusbarExample: def push_item(self, widget, data): buff = " Элемент %d" % self.count self.count = self.count + 1 self.status_bar.push(data, buff) return def pop_item(self, widget, data): self.status_bar.pop(data) return def __init__(self): self.count = 1 # Создаём новое окно window = gtk.Window(gtk.WINDOW_TOPLEVEL) window.set_size_request(250, 100) window.set_title("Статус-панель") window.connect("delete_event", lambda w,e: gtk.main_quit()) vbox = gtk.VBox(False, 1) window.add(vbox) self.status_bar = gtk.Statusbar() context_id = self.status_bar.get_context_id("Пример статус-панели") button = gtk.Button("добавить элемент") button.connect("clicked", self.push_item, context_id) vbox.pack_start(button, True, True, 2) button = gtk.Button("убрать последний") button.connect("clicked", self.pop_item, context_id) vbox.pack_start(button, True, True, 2) vbox.pack_start(self.status_bar, True, True, 0) # Способ отображения всех виджетов, расположенных на окне. window.show_all() def main(): gtk.main() return 0 if __name__ == "__main__": StatusbarExample() main()
Предыдущая страница | На уровень выше | Следующая страница |
9.7. Линейки (gtk.HRuler, gtk.VRuler) | К оглавлению | 9.9. Поле ввода текста (gtk.Entry) |