La Figure 11.2 montre la fenetre créée par le programme d'exemple itemfactory.py, qui utilise la gtk.ItemFactory :
Voici le code source de itemfactory.py :
1 #!/usr/bin/env python
2
3 # exemple itemfactory.py
4
5 import pygtk
6 pygtk.require('2.0')
7 import gtk
8
9 class ExempleItemFactory:
10 # L'inevitable petite fonction de rappel
11 def affiche_hello(self, w, donnees):
12 print "Salut tout le monde !"
13
14 # Voici la structure d'ItemFactoryEntry utilisee pour generer de nouveaux menus
15 # Element 1: Le chemin du menu. la lettre qui suit le caractere "_" indique un
16 # raccourci clavier actif une fois le menu ouvert.
17 # Element 2: Le raccourci clavier pour cette entree.
18 # Element 3: La fonction de rappel.
19 # Element 4: L'action de la fonction de rappel. Modifie les parametres avec
20 # lesquels la fonction de rappel est appelee. 0 par defaut.
21 # Element 5: Le type d'entree. Indique quelle sorte d'entree l'on souhaite creer.
22 # Voici les differentes valeurs possibles :
23
24 # NULL -> "- "
25 # "" -> "
- "
26 # "
" -> cree une entree titre
27 # "- " -> cree une entree simple
28 # "
" -> cree une entree a cocher
29 # "" -> cree une entree a bascule
30 # "" -> cree une entree radio
31 # -> chemin d'une entree radio a laquelle attacher celle-ci
32 # "" -> cree un separateur
33 # "" -> cree une entree pouvant contenir des sous-entrees (optionel)
34 # "" -> cree une entree "Branch" alignee a droite
35
36 def menu_principal(self, fenetre):
37 racc_clavier = gtk.AccelGroup()
38
39 # Cette fonction initialise l'ItemFactory.
40 # Param 1: Le type de menu - peut etre MenuBar, Menu,
41 # ou OptionMenu.
42 # Param 2: Le chemin du menu.
43 # Param 3: une reference a un AccelGroup. L'ItemFactory configure
44 # la table des raccourcis en generant les menus.
45 item_factory = gtk.ItemFactory(gtk.MenuBar, "", racc_clavier)
46
47 # Cette methode genere les entrees du menu. On transmet a l'ItemFactory
48 # la liste des entrees de menu.
49 item_factory.create_items(self.entrees_menu)
50
51 # On attache le nouveau groupe de raccourcis clavier a la fenetre.
52 fenetre.add_accel_group(racc_clavier)
53
54 # On a besoin de garder une reference a item_factory pour empecher sa destruction
55 self.item_factory = item_factory
56 # Enfin, on renvoie la barre de menus creee par l'ItemFactory.
57 return item_factory.get_widget("")
58
59 def __init__(self):
60 self.entrees_menu = (
61 ( "/_Fichier", None, None, 0, "" ),
62 ( "/Fichier/_Nouveau", "N", self.affiche_hello, 0, None ),
63 ( "/Fichier/_Ouvrir", "O", self.affiche_hello, 0, None ),
64 ( "/Fichier/_Enregistrer", "S", self.affiche_hello, 0, None ),
65 ( "/Fichier/Enregistrer _sous", None, None, 0, None ),
66 ( "/Fichier/sep1", None, None, 0, "" ),
67 ( "/Fichier/Quitter", "Q", gtk.main_quit, 0, None ),
68 ( "/_Options", None, None, 0, "" ),
69 ( "/Options/Test", None, None, 0, None ),
70 ( "/_Aide", None, None, 0, "" ),
71 ( "/_Aide/A propos", None, None, 0, None ),
72 )
73 fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
74 fenetre.connect("destroy", gtk.main_quit, "WM destroy")
75 fenetre.set_title("ItemFactory")
76 fenetre.set_size_request(300, 200)
77
78 boitev_princ = gtk.VBox(False, 1)
79 boitev_princ.set_border_width(1)
80 fenetre.add(boitev_princ)
81 boitev_princ.show()
82
83 barremenus = self.menu_principal(fenetre)
84
85 boitev_princ.pack_start(barremenus, False, True, 0)
86 barremenus.show()
87 fenetre.show()
88
89 def main():
90 gtk.main()
91 return 0
92
93 if __name__ == "__main__":
94 ExempleItemFactory()
95 main()
Pour le moment, il n'y a que cet exemple. Une explication et de nombreux commentaires suivront plus tard.