-
Notifications
You must be signed in to change notification settings - Fork 0
/
sec-AdjustmentInternals.html
110 lines (88 loc) · 6.41 KB
/
sec-AdjustmentInternals.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
<!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-15" http-equiv="Content-Type">
<title>7.3. Les ajustements en détail</title>
<link rel="stylesheet" href="pygtktutfr.css" type="text/css">
<meta name="keywords" content="python,pygtk,tutoriel,traduction,adjustment,ajustement">
<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-Adjustments.html" title="Chapitre 7. Les ajustements">
<link rel="previous" href="sec-UsingAdjustmentsTheEasyWay.html" title="7.2. Utiliser facilement les ajustements">
<link rel="next" href="ch-RangeWidgets.html" title="Chapitre 8. Les widgets d'intervalle">
</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">7.3. Les ajustements en détail</th>
</tr><tr>
<td width="20%" align="left"><a accesskey="p" href="sec-UsingAdjustmentsTheEasyWay.html">Préc.</a></td>
<th width="60%" align="center">Chapitre 7. Les ajustements</th>
<td width="20%" align="right"><a accesskey="n" href="ch-RangeWidgets.html">Suiv.</a></td>
</tr></table>
<hr>
</div>
<div class="sect1"><div class="titlepage"><div>
<h2 class="title" style="clear: both"><a name="AjustementsDetail"></a>7.3. Les ajustements en détail</h2>
</div></div>
<p>Vous devez penser : «C'est bien beau tout ça, mais qu'est-ce qui se passe si je veux créer mes propres gestionnaires pour réagir quand l'utilisateur règle un widget d'intervalle ou un bouton fléché ? Et comment je récupère la valeur d'un ajustement dans ces gestionnaires ?» Afin de répondre à ces questions et à bien d'autres, commençons par jeter un œil aux attributs de l'objet <tt>gtk.Adjustment</tt> :</p>
<pre class="programlisting">
lower
upper
value
step_increment
page_increment
page_size
</pre>
<p>Pour une instance donnée <i><tt>ajust</tt></i> de <tt>gtk.Adjustment</tt>, on définit ou récupère chacun de ses attributs avec <i><tt>ajust.lower</tt></i>, <i><tt>ajust.value</tt></i>, etc.</p>
<p>En règle générale, lorsqu'on définit la valeur d'un ajustement, on veut que le changement soit refleté par chaque widget qui utilise cet ajustement. À cet effet, PyGTK fournit la méthode suivante :</p>
<pre class="programlisting">
ajustement.set_value(<b><tt>value</tt></b>)
</pre>
<p>La classe <tt>gtk.Adjustment</tt>, nous l'avons vu plus haut, est une sous-classe de <tt>gtk.Object</tt> au même titre que n'importe quel widget, et peut donc émettre des signaux. Voilà pourquoi les modifications sont reflétées automatiquement lorsque vous partagez un ajustement entre une barre de défilement et un autre widget ajustable ; tous les widgets ajustables connectent des gestionnaires au signal "<tt>value_changed</tt>" de leur ajustement, ce que peut aussi faire votre programme. Voici comment définir la fonction de rappel de ce signal :</p>
<pre class="programlisting">
def value_changed(ajustement):
</pre>
<p>Les différents widgets qui utilisent un ajustement lui font émettre ce signal à chaque fois qu'ils modifient sa valeur. Cela arrive lorsque une action de l'utilisateur fait se déplacer le curseur dans un widget d'intervalle, mais aussi lorsque le programme change explicitement la valeur grâce à la méthode <tt>set_value</tt>(). Imaginons, par exemple, que vous ayez un gradateur et que vous vouliez changer la rotation d'une image à chaque fois que sa valeur est modifiée. Vous écririez alors une fonction de rappel semblable à celle-ci :</p>
<pre class="programlisting">
def rpl_rotation_img(ajust, image):
rotation_image (image, ajust.value)
...
</pre>
<p>Puis il vous faudrait la connecter à l'ajustement du gradateur ainsi :</p>
<pre class="programlisting">
ajust.connect("value_changed", rpl_rotation_img, image)
</pre>
<p>Et si un widget reconfigure les champs <i><tt>upper</tt></i> ou <i><tt>lower</tt></i> de son ajustement ? Ça arrive par exemple quand un utilisateur ajoute du texte à une zone de texte. L'ajustement émet alors le signal "<tt>changed</tt>", qui ressemble à ça :</p>
<pre class="programlisting">
def changed(ajustement):
</pre>
<p>Les widgets d'intervalle connectent tous automatiquement un gestionnaire à ce signal, qui reflète le changement en modifiant leur apparence. La taille du curseur d'une barre de défilement est par exemple inversement proportionnelle à la différence entre les valeurs des arguments <i><tt>lower</tt></i> et <i><tt>upper</tt></i> de son ajustement.</p>
<p>Il est peu probable que vous ayez un jour besoin d'attacher un gestionnaire à ce signal, à moins que vous n'écriviez un nouveau type de widget d'intervalle. Dans tous les cas, si vous modifiez directement une des valeurs d'un ajustement, vous devriez lui faire émettre ce signal afin de reconfigurer tous les widgets qui l'utilisent. Utilisez pour cela cette méthode :</p>
<pre class="programlisting">
ajustement.emit("changed")
</pre>
<p>Maintenant, en avant, et ajustez !</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-UsingAdjustmentsTheEasyWay.html">Préc.</a></td>
<td width="20%" align="center"><a accesskey="u" href="ch-Adjustments.html">Chapitre parent</a></td>
<td width="40%" align="right"><a accesskey="n" href="ch-RangeWidgets.html">Suiv.</a></td>
</tr><tr>
<td width="40%" align="left" valign="top">7.2. Utiliser facilement les ajustements</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 8. Les widgets d'intervalle</td>
</tr></table>
</div>
</body>
</html>