El programa de ejemplo itemfactory.py usa la gtk.ItemFactory. La figura Figura 11.2. Ejemplo de Factoria de Elementos muestra la ventana del programa:
El código fuente de itemfactory.py es:
1 #!/usr/bin/env python
2
3 # example itemfactory.py
4
5 import gtk
6
7 class ItemFactoryExample:
8 # Obligatory basic callback
9 def print_hello(self, w, data):
10 print "Hello, World!"
11
12 # Esta es la estructura de la Factoria de Elementos usada para generar nuevos menús
13 # Item 1: La ruta del menú. La letra después del subrayado indica
14 # una tecla de atajo cuando el menú se abra
15 # Item 2: La tecla de atajo para el elemento
16 # Item 3: La retrollamada
17 # Item 4: La acción de retrollamada. Esto cambia los parámetros con
18 # los que la retrollamada se llama. El valor predeterminado es 0
19 # Item 5: El tipo de elemento, usado para definir el tipo al que pertenece el elemento
20 # Aqui están los posibles valores
21
22 # NULL -> "<Item>"
23 # "" -> "<Item>"
24 # "<Title>" -> título
25 # "<Item>" -> simple
26 # "<CheckItem>" -> activación
27 # "<ToggleItem>" -> biestado
28 # "<RadioItem>" -> exclusión mútua
29 # <path> -> ruta de un elemento de exclusión mútua
30 # "<Separator>" -> separador
31 # "<Branch>" -> contenedor de nuevos elementos
32 # "<LastBranch>" -> rama justificada a la derecha
33
34 def get_main_menu(self, window):
35 accel_group = gtk.AccelGroup()
36
37 # This function initializes the item factory.
38 # Param 1: The type of menu - can be MenuBar, Menu,
39 # or OptionMenu.
40 # Param 2: The path of the menu.
41 # Param 3: A reference to an AccelGroup. The item factory sets up
42 # the accelerator table while generating menus.
43 item_factory = gtk.ItemFactory(gtk.MenuBar, "<main>", accel_group)
44
45 # This method generates the menu items. Pass to the item factory
46 # the list of menu items
47 item_factory.create_items(self.menu_items)
48
49 # Attach the new accelerator group to the window.
50 window.add_accel_group(accel_group)
51
52 # need to keep a reference to item_factory to prevent its destruction
53 self.item_factory = item_factory
54 # Finally, return the actual menu bar created by the item factory.
55 return item_factory.get_widget("<main>")
56
57 def __init__(self):
58 self.menu_items = (
59 ( "/_File", None, None, 0, "<Branch>" ),
60 ( "/File/_New", "<control>N", self.print_hello, 0, None ),
61 ( "/File/_Open", "<control>O", self.print_hello, 0, None ),
62 ( "/File/_Save", "<control>S", self.print_hello, 0, None ),
63 ( "/File/Save _As", None, None, 0, None ),
64 ( "/File/sep1", None, None, 0, "<Separator>" ),
65 ( "/File/Quit", "<control>Q", gtk.mainquit, 0, None ),
66 ( "/_Options", None, None, 0, "<Branch>" ),
67 ( "/Options/Test", None, None, 0, None ),
68 ( "/_Help", None, None, 0, "<LastBranch>" ),
69 ( "/_Help/About", None, None, 0, None ),
70 )
71 window = gtk.Window(gtk.WINDOW_TOPLEVEL)
72 window.connect("destroy", gtk.mainquit, "WM destroy")
73 window.set_title("Item Factory")
74 window.set_size_request(300, 200)
75
76 main_vbox = gtk.VBox(gtk.FALSE, 1)
77 main_vbox.set_border_width(1)
78 window.add(main_vbox)
79 main_vbox.show()
80
81 menubar = self.get_main_menu(window)
82
83 main_vbox.pack_start(menubar, gtk.FALSE, gtk.TRUE, 0)
84 menubar.show()
85 window.show()
86
87 def main():
88 gtk.main()
89 return 0
90
91 if __name__ == "__main__":
92 ItemFactoryExample()
93 main()
|
Por ahora esto es sólo un ejemplo. Una explicación y muchos comentarios vendrán después.