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 # ejemplo itemfactory.py
4
5 import gtk
6 pygtk.require('2.0')
7 import gtk
8
9 class ItemFactoryExample:
10 # Retrollamada básica obligatoria
11 def print_hello(self, w, data):
12 print "Hello, World!"
13
14 # Esta es la estructura de la Factoria de Elementos usada para generar nuevos menús
15 # Item 1: La ruta del menú. La letra después del subrayado indica
16 # una tecla de atajo cuando el menú se abra
17 # Item 2: La tecla de atajo para el elemento
18 # Item 3: La retrollamada
19 # Item 4: La acción de retrollamada. Esto cambia los parámetros con
20 # los que la retrollamada es llamada. El valor predeterminado es 0
21 # Item 5: El tipo de elemento, usado para definir el tipo al que pertenece el elemento
22 # Aqui están los posibles valores
23
24 # NULL -> "<Item>"
25 # "" -> "<Item>"
26 # "<Title>" -> crear un elemento de título
27 # "<Item>" -> crear un elemento simple
28 # "<CheckItem>" -> crear un elemento de activación
29 # "<ToggleItem>" -> crear un botón biestado
30 # "<RadioItem>" -> crear un botón de exclusión mútua
31 # <path> -> ruta de un elemento de exclusión mútua
32 # "<Separator>" -> crear un separador
33 # "<Branch>" -> crear un contenedor de nuevos elementos
34 # "<LastBranch>" -> crear una rama justificada a la derecha
35
36 def get_main_menu(self, window):
37 accel_group = gtk.AccelGroup()
38
39 # Esta función inicializa la factoría de elementos.
40 # Param 1: El tipo del menú - puede ser MenuBar, Menu,
41 # u OptionMenu.
42 # Param 2: La ruta o camino del menú.
43 # Param 3: Una referencia a un AccelGroup. La factoria de elementos establece la
44 # tabla de aceleradores (atajos) al generar los menús.
45 item_factory = gtk.ItemFactory(gtk.MenuBar, "<main>", accel_group)
46
47 # Este método genera los elementos de menú. Pasa a la factoría de elementos la lista
48 # de los elementos de menú
49 item_factory.create_items(self.menu_items)
50
51 # Añadir el nuevo grupo de aceleradores a la ventana.
52 window.add_accel_group(accel_group)
53
54 # es necesario mantener una referencia a item_factory para evitar su destrucción
55 self.item_factory = item_factory
56 # Finalmente, se devuelve la barra de menú creada por la factoría de elementos.
57 return item_factory.get_widget("<main>")
58
59 def __init__(self):
60 self.menu_items = (
61 ( "/_File", None, None, 0, "<Branch>" ),
62 ( "/File/_New", "<control>N", self.print_hello, 0, None ),
63 ( "/File/_Open", "<control>O", self.print_hello, 0, None ),
64 ( "/File/_Save", "<control>S", self.print_hello, 0, None ),
65 ( "/File/Save _As", None, None, 0, None ),
66 ( "/File/sep1", None, None, 0, "<Separator>" ),
67 ( "/File/Quit", "<control>Q", gtk.mainquit, 0, None ),
68 ( "/_Options", None, None, 0, "<Branch>" ),
69 ( "/Options/Test", None, None, 0, None ),
70 ( "/_Help", None, None, 0, "<LastBranch>" ),
71 ( "/_Help/About", None, None, 0, None ),
72 )
73 window = gtk.Window(gtk.WINDOW_TOPLEVEL)
74 window.connect("destroy", gtk.mainquit, "WM destroy")
75 window.set_title("Item Factory")
76 window.set_size_request(300, 200)
77
78 main_vbox = gtk.VBox(gtk.FALSE, 1)
79 main_vbox.set_border_width(1)
80 window.add(main_vbox)
81 main_vbox.show()
82
83 menubar = self.get_main_menu(window)
84
85 main_vbox.pack_start(menubar, gtk.FALSE, gtk.TRUE, 0)
86 menubar.show()
87 window.show()
88
89 def main():
90 gtk.main()
91 return 0
92
93 if __name__ == "__main__":
94 ItemFactoryExample()
95 main()
|
Por ahora esto es sólo un ejemplo. Más adelante aparecerá una explicación y muchos comentarios.