Пример использования фабрики

Пример itemfactory.py использует gtk.ItemFactory. Рисунок 11.2, “Пример Item Factory” показывает получаемое окно:

Рисунок 11.2. Пример Item Factory

Item Factory Example

Исходный код для itemfactory.py:

#!/usr/bin/env python
# -*- coding: utf8 -*-
# example itemfactory.py

import pygtk
pygtk.require('2.0')
import gtk

class ItemFactoryExample:
    # Необходимый простой callback
    def print_hello(self, w, data):
        print "Hello, World!"

    # Это структура ItemFactoryEntry, используемая для создания новых меню.
    # Пункт 1: Путь меню. Символ после подчёркивания создаёт ускоритель
    #         действующий когда меню открыто.
    # Пункт 2: Назначение ускорителя для пункта.
    # Пункт 3: Callback.
    # Пункт 4: Параметр передающийся в вызов
    #         callback функций, по умолчанию 0.
    # Пункт 5: Тип пункта.
    #       Может принимать значение:

    #       NULL               -> "<Item>"
    #       ""                 -> "<Item>"
    #       "<Title>"          -> создаёт пункт-заголовок //title item, проверить.
    #       "<Item>"           -> создаёт простой пункт
    #       "<CheckItem>"      -> создаёт пункт-CheckButton
    #       "<ToggleItem>"     -> создаёт пункт-ToggleButton
    #       "<RadioItem>"      -> создаёт пункт-RadioButton
    #       <path>             -> путь к другому переключателю для связывания в группу
    #       "<Separator>"      -> создаёт разделитель
    #       "<Branch>"         -> создаёт подменю (опционально)
    #       "<LastBranch>"     -> создаёт меню справа

    def get_main_menu(self, window):
        accel_group = gtk.AccelGroup()

        # Эта функция инициализирует item factory.
        # Параметр 1: Тип меню - может быть MEnuBar, Menu
        #          или OptionMenu.
        # Параметр 2: Путь к меню.
        # Параметр 3: Ссылка на AccelGroup. Item factory настраивает
        # таблицу ускорителей, когда генерирует меню.
        item_factory = gtk.ItemFactory(gtk.MenuBar, "<main>", accel_group)

        # Этот метод генерирует пункты меню. Передайте item factory
        #  список пунктов меню.
        item_factory.create_items(self.menu_items)

        # Присоединяем AccelGroup к окну.
        window.add_accel_group(accel_group)

        # Нужно сохранить ссылку на item_factory чтобы избежать её разрушения.
        self.item_factory = item_factory
        # Наконец, возвращаем строку меню созданную с помощью item factory.
        return item_factory.get_widget("<main>")

    def __init__(self):
        self.menu_items = (
            ( "/_File",         None,         None, 0, "<Branch>" ),
            ( "/File/_New",     "<control>N", self.print_hello, 0, None ),
            ( "/File/_Open",    "<control>O", self.print_hello, 0, None ),
            ( "/File/_Save",    "<control>S", self.print_hello, 0, None ),
            ( "/File/Save _As", None,         None, 0, None ),
            ( "/File/sep1",     None,         None, 0, "<Separator>" ),
            ( "/File/Quit",     "<control>Q", gtk.main_quit, 0, None ),
            ( "/_Options",      None,         None, 0, "<Branch>" ),
            ( "/Options/Test",  None,         None, 0, None ),
            ( "/_Help",         None,         None, 0, "<LastBranch>" ),
            ( "/_Help/About",   None,         None, 0, None ),
            )
        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        window.connect("destroy", lambda w: gtk.main_quit(), "WM destroy")
        window.set_title("Item Factory")
        window.set_size_request(300, 200)

        main_vbox = gtk.VBox(False, 1)
        main_vbox.set_border_width(1)
        window.add(main_vbox)
        main_vbox.show()

        menubar = self.get_main_menu(window)

        main_vbox.pack_start(menubar, False, True, 0)
        menubar.show()
        window.show()

def main():
    gtk.main()
    return 0

if __name__ == "__main__":
    ItemFactoryExample()
    main()

Пока здесь только этот пример. Объяснения и куча комментариев будут позже.


Предыдущая страница На уровень выше  Следующая страница
11.3. Использование фабрики элементов Оглавление  Глава 12. Область рисования (gtk.DrawingArea)

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

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

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