-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsec-ItemFactoryExample.html
172 lines (155 loc) · 8.06 KB
/
sec-ItemFactoryExample.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
<title>11.4. Démonstration de l'ItemFactory</title>
<link rel="stylesheet" href="pygtktutfr.css" type="text/css">
<meta name="keywords" content="python,pygtk,tutoriel,traduction,menu">
<link rel="start" href="index.html" title="Tutoriel PyGTK 2.0">
<link rel="home" href="index.html" title="Table des matières">
<link rel="up" href="ch-MenuWidget.html" title="Chapitre 11. Les menus">
<link rel="previous" href="sec-UsingItemFactory.html" title="11.3. Création de menus avec l'ItemFactory">
<link rel="next" href="ch-DrawingArea.html" title="Chapitre 12. La zone de dessin (Drawing Area)">
</head>
<body>
<div class="localisation">
Vous êtes à peu près ici :
<a href="../../index.html">Accueil</a> »
<a href="../pygtktut.php">tutoriel PyGTK</a> »
<a href="index.html">PyGTK : sommaire</a>
</div> <!-- fin localisation -->
<div class="navheader">
<table width="100%" summary="En-tête de navigation">
<tr>
<th colspan="3" align="middle">11.4. Démonstration de l'ItemFactory</th>
</tr><tr>
<td width="20%" align="left"><a accesskey="p" href="sec-UsingItemFactory.html">Préc.</a></td>
<th width="60%" align="center">Chapter 11. Menu Widget</th>
<td width="20%" align="right"><a accesskey="n" href="ch-DrawingArea.html">Suiv.</a></td>
</tr></table>
<hr>
</div>
<div class="sect1"><div class="titlepage">
<div><h2 class="title" style="clear: both"><a name="ExempleItemFactory"></a>11.4. Démonstration de l'ItemFactory</h2>
</div></div>
<p>La <a href="sec-ItemFactoryExample.html#fig-itemfactory" title="Figure 11.2. Item Factory Example">Figure 11.2</a> montre la fenetre créée par le programme d'exemple <a href="exemples/itemfactory.py" target="_top"><b>itemfactory.py</b></a>, qui utilise la <tt>gtk.ItemFactory</tt> :</p>
<div class="figure"><a name="fig-itemfactory"></a>
<p class="title"><b>Figure 11.2. Exemple de menu créé avec l'ItemFactory</b></p>
<div class="mediaobject" align="center">
<img src="figures/itemfactory.png" align="middle" alt="exemple itemfactory">
</div></div>
<p>Voici le code source de <a href="exemples/itemfactory.py" target="_top"><b>itemfactory.py</b></a> :</p>
<pre class="programlisting">
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 -> "<Item>"
25 # "" -> "<Item>"
26 # "<Title>" -> cree une entree titre
27 # "<Item>" -> cree une entree simple
28 # "<CheckItem>" -> cree une entree a cocher
29 # "<ToggleItem>" -> cree une entree a bascule
30 # "<RadioItem>" -> cree une entree radio
31 # <chemin> -> chemin d'une entree radio a laquelle attacher celle-ci
32 # "<Separator>" -> cree un separateur
33 # "<Branch>" -> cree une entree pouvant contenir des sous-entrees (optionel)
34 # "<LastBranch>" -> 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, "<main>", 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("<main>")
58
59 def __init__(self):
60 self.entrees_menu = (
61 ( "/_Fichier", None, None, 0, "<Branch>" ),
62 ( "/Fichier/_Nouveau", "<control>N", self.affiche_hello, 0, None ),
63 ( "/Fichier/_Ouvrir", "<control>O", self.affiche_hello, 0, None ),
64 ( "/Fichier/_Enregistrer", "<control>S", self.affiche_hello, 0, None ),
65 ( "/Fichier/Enregistrer _sous", None, None, 0, None ),
66 ( "/Fichier/sep1", None, None, 0, "<Separator>" ),
67 ( "/Fichier/Quitter", "<control>Q", gtk.main_quit, 0, None ),
68 ( "/_Options", None, None, 0, "<Branch>" ),
69 ( "/Options/Test", None, None, 0, None ),
70 ( "/_Aide", None, None, 0, "<LastBranch>" ),
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()
</pre>
<p>Pour le moment, il n'y a que cet exemple. Une explication et de nombreux commentaires suivront plus tard.</p>
</div>
<div class="navfooter">
<hr>
<table width="100%" summary="Bas de page de navigation">
<tr>
<td width="40%" align="left"><a accesskey="p" href="sec-UsingItemFactory.html">Préc.</a></td>
<td width="20%" align="center"><a accesskey="u" href="ch-MenuWidget.html">Chapitre parent</a></td>
<td width="40%" align="right"><a accesskey="n" href="ch-DrawingArea.html">Suiv.</a>
</td></tr><tr>
<td width="40%" align="left" valign="top">11.3. Création de menus avec l'ItemFactory</td>
<td width="20%" align="center"><a accesskey="h" href="index.html">Table des matières</a></td>
<td width="40%" align="right" valign="top">Chapitre 12. La zone de dessin (Drawing Area)</td>
</tr></table>
</div>
</body>
</html>