-
Notifications
You must be signed in to change notification settings - Fork 0
/
ch-ButtonWidget.html
269 lines (245 loc) · 10.6 KB
/
ch-ButtonWidget.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
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
<!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>Chapitre 6. Les boutons</title>
<link rel="stylesheet" href="pygtktutfr.css" type="text/css">
<meta name="keywords" content="python,pygtk,tutoriel,traduction,bouton">
<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="index.html" title="Table des matières">
<link rel="previous" href="sec-WidgetsWithoutWindows.html" title="5.2. Les widgets sans fenêtre">
<link rel="next" href="sec-ToggleButtons.html" title="6.2. Les boutons à bascule">
</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="center">Chapitre 6. Les boutons</th></tr>
<tr>
<td width="20%" align="left"><a accesskey="p" href="sec-WidgetsWithoutWindows.html">Préc.</a></td>
<th width="60%" align="center"></th>
<td width="20%" align="right"><a accesskey="n" href="sec-ToggleButtons.html">Suiv.</a></td>
</tr></table>
<hr>
</div>
<div class="chapter">
<div class="titlepage">
<div><h2 class="title"><a name="Boutons"></a>Chapitre 6. Les boutons</h2></div>
</div>
<div class="toc"><p><b>Sommaire</b></p><dl>
<dt>6.1. <a href="ch-ButtonWidget.html#BoutonsSimples">Les boutons simples</a></dt>
<dt>6.2. <a href="sec-ToggleButtons.html">Les boutons à bascule</a></dt>
<dt>6.3. <a href="sec-CheckButtons.html">Les cases à cocher</a></dt>
<dt>6.4. <a href="sec-RadioButtons.html">Les boutons radio</a></dt>
</dl></div>
<div class="sect1">
<div class="titlepage">
<div><h2 class="title" style="clear: both"><a name="BoutonsSimples"></a>6.1. Les boutons simples</h2>
</div></div>
<p>Nous avons pratiquement déjà fait le tour du widget bouton. Il est en effet très simple. Lors de la création d'un bouton avec la fonction <tt>gtk.Button</tt>(), vous pouvez lui donner une étiquette en lui passant une chaine de caractères. Mais vous pouvez tout aussi bien créer un bouton vierge en ne passant rien à la fonction ; il vous suffira ensuite, si vous le souhaitez, de placer une étiquette ou une image pixmap dans ce nouveau bouton. Pour ce faire, créez une nouvelle boite et placez-y vos objets avec l'habituelle <tt>pack_start()</tt>. Puis, avec <tt>add</tt>(), placez la boite dans le bouton.</p>
<p>La fonction de création des boutons est la suivante :</p>
<pre class="programlisting">
bouton = gtk.Button(<b>label</b>=None, <b>stock</b>=None)
</pre>
<p>Si l'on donne une chaine de caractères à l'argument <i><tt>label</i></tt>, elle sera affichée sur le bouton. L'argument <i><tt>stock</i></tt>, quant à lui, sert à afficher sur le bouton une icône du stock de GTK ainsi que le texte correspondant. Les éléments du stock sont :</p>
<pre class="programlisting">
STOCK_DIALOG_INFO
STOCK_DIALOG_WARNING
STOCK_DIALOG_ERROR
STOCK_DIALOG_QUESTION
STOCK_DND
STOCK_DND_MULTIPLE
STOCK_ADD
STOCK_APPLY
STOCK_BOLD
STOCK_CANCEL
STOCK_CDROM
STOCK_CLEAR
STOCK_CLOSE
STOCK_CONVERT
STOCK_COPY
STOCK_CUT
STOCK_DELETE
STOCK_EXECUTE
STOCK_FIND
STOCK_FIND_AND_REPLACE
STOCK_FLOPPY
STOCK_GOTO_BOTTOM
STOCK_GOTO_FIRST
STOCK_GOTO_LAST
STOCK_GOTO_TOP
STOCK_GO_BACK
STOCK_GO_DOWN
STOCK_GO_FORWARD
STOCK_GO_UP
STOCK_HELP
STOCK_HOME
STOCK_INDEX
STOCK_ITALIC
STOCK_JUMP_TO
STOCK_JUSTIFY_CENTER
STOCK_JUSTIFY_FILL
STOCK_JUSTIFY_LEFT
STOCK_JUSTIFY_RIGHT
STOCK_MISSING_IMAGE
STOCK_NEW
STOCK_NO
STOCK_OK
STOCK_OPEN
STOCK_PASTE
STOCK_PREFERENCES
STOCK_PRINT
STOCK_PRINT_PREVIEW
STOCK_PROPERTIES
STOCK_QUIT
STOCK_REDO
STOCK_REFRESH
STOCK_REMOVE
STOCK_REVERT_TO_SAVED
STOCK_SAVE
STOCK_SAVE_AS
STOCK_SELECT_COLOR
STOCK_SELECT_FONT
STOCK_SORT_ASCENDING
STOCK_SORT_DESCENDING
STOCK_SPELL_CHECK
STOCK_STOP
STOCK_STRIKETHROUGH
STOCK_UNDELETE
STOCK_UNDERLINE
STOCK_UNDO
STOCK_YES
STOCK_ZOOM_100
STOCK_ZOOM_FIT
STOCK_ZOOM_IN
STOCK_ZOOM_OUT
</pre>
<p>Le programme <a href="exemples/boutons.py" target="_top"><B>boutons.py</B></a> donne un exemple d'utilisation de <tt>gtk.Button</tt>() pour créer un bouton contenant une image et une étiquette. Le code de création de la boite est séparé du reste afin que vous puissiez l'utiliser dans vos programmes. Nous verrons d'autres exemples faisant appel à des images un peu plus loin dans ce tutoriel. La <a title="Figure 6.1. Bouton avec étiquette et image pixmap" href="ch-ButtonWidget.html#boutonfig">figure 6.1</a> montre la fenêtre et son bouton qui contient une étiquette et une image pixmap :</p>
<div class="figure"><a name="boutonfig"></a>
<p class="title"><b>Figure 6.1. Bouton avec étiquette et image pixmap</b></p>
<div class="mediaobject" align="center" align="center"><img src="figures/boutons.png" align="center">
</div></div>
<p>Voici le code source du programme <a href="exemples/boutons.py" target="_top"><B>boutons.py</B></a> :</p>
<pre class="programlisting">
1 #!/usr/bin/env python
2
3 # exemple boutons.py
4
5 import pygtk
6 pygtk.require('2.0')
7 import gtk
8
9 # On cree une boite verticale, on y place une image
10 # et une etiquette, et on renvoie la boite.
11
12 def boite_xpm_etiquette(parent, fichier_xpm, texte_etiquette):
13 # On cree une boite pour la pixmap et l'etiquette
14 boite1 = gtk.HBox(False, 0)
15 boite1.set_border_width(2)
16
17 # A present l'image.
18 image = gtk.Image()
19 image.set_from_file(fichier_xpm)
20
21 # On cree une etiquette pour le bouton.
22 etiquette = gtk.Label(texte_etiquette)
23
24 # On place la pixmap et l'etiquette dans la boite.
25 boite1.pack_start(image, False, False, 3)
26 boite1.pack_start(etiquette, False, False, 3)
27
28 image.show()
29 etiquette.show()
30 return boite1
31
32 class Bouton:
33 # Notre methode de rappel habituelle.
34 def salut(self, widget, donnees=None):
35 print "Salut ! - Clic sur le %s." % donnees
36
37 def __init__(self):
38 # Creation d'une nouvelle fenetre.
39 self.fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
40
41 self.fenetre.set_title("Bouton et image")
42
43 # C'est une bonne idee de faire ceci pour chaque fenetre.
44 self.fenetre.connect("destroy", lambda wid: gtk.main_quit())
45 self.fenetre.connect("delete_event", lambda a1,a2: gtk.main_quit())
46
47 # On fixe la largeur des bordures de la fenetre.
48 self.fenetre.set_border_width(10)
49
50 # Creation d'un nouveau bouton.
51 bouton = gtk.Button()
52
53 # On connecte le signal "clicked" du bouton a la fonction de rappel
54 bouton.connect("clicked", self.salut, "bouton cool")
55
56 # Ceci appelle notre fonction de creation de boites.
57 boite1= boite_xpm_etiquette(self.fenetre, "info.xpm", "bouton cool")
58
59 # On place et on affiche tous nos widgets.
60 bouton.add(boite1)
61
62 boite1.show()
63 bouton.show()
64
65 self.fenetre.add(bouton)
66 self.fenetre.show()
67
68 def main():
69 gtk.main()
70 return 0
71
72 if __name__ == "__main__":
73 Bouton()
74 main()
</pre>
<p>De la ligne 12 à la ligne 32, on définit la fonction <tt>boite_xpm_etiquette</tt>()
qui prend en charge la création d'une boite horizontale avec une bordure de 2
(lignes 14-15), puis y place une image (lignes 25) et une étiquette (ligne 26).</p>
<p>Aux lignes 32-66, on définit la classe <tt>Bouton</tt>. La méthode
constructeur s'étale de la ligne 38 à la ligne 66 ; elle crée une
fenêtre (ligne 39), lui donne un titre (ligne 41), connecte les signaux
"<tt>delete_event</tt>" et "<tt>destroy</tt>" (lignes 44-45).
Puis, à la ligne 51, elle crée le bouton sans étiquette, avant
de connecter son signal "<tt>clicked</tt>" à la méthode de rappel
<tt>salut</tt>() (ligne 54). Enfin, elle appelle la fonction <tt>boite_xpm_etiquette</tt>()
à la ligne 57, afin de créer l'image et l'étiquette qu'elle placera
dans le bouton à la ligne 60.</p>
<p>La fonction <tt>boite_xpm_etiquette</tt>() pourrait être utilisée pour
placer des images pixmap et des étiquettes dans n'importe quel widget pouvant
jouer le rôle de conteneur.</p>
<p>Le widget bouton peut émettre les signaux suivants :</p>
<pre class="programlisting">
pressed - émis lorsque le bouton de la souris est enfoncé sur le widget
released - émis lorsque le bouton de la souris est relâché sur le widget
clicked - émis lorsque le bouton de la souris est enfoncé puis relâché sur le widget
enter - émis lorsque le pointeur de la souris arrive sur le widget
leave - émis lorsque le pointeur de la souris quitte le widget
</pre>
</div>
</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-WidgetsWithoutWindows.html">Préc.</a></td>
<td width="20%" align="center"><a accesskey="u" href="index.html">Chapitre parent</a></td>
<td width="40%" align="right"> <a accesskey="n" href="sec-ToggleButtons.html">Suiv.</a></td></tr>
<tr>
<td width="40%" align="left" valign="top">5.2. Les widgets sans fenêtre</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">6.2. Les boutons à bascule</td>
</tr></table>
</div>
</body>
</html>