Строка состояния (gtk.StatusBar)

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, “Пример строки состояния” показывает результат:

Рисунок 9.9. Пример строки состояния

Statusbar Example

Исходный код 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)

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>