Le widget gtk.Arrow consiste en une tête de flèche pouvant pointer dans différentes directions et à laquelle on peut appliquer un certain nombre de styles. Dans beaucoup d'applications, ce widget se révèlera très utile une fois placé à l'intérieur d'un bouton. A l'instar des étiquettes, il n'émet pas de signaux.
Pour manipuler les flèches, il n'y a que deux appels :
fleche = gtk.Arrow(arrow_type, shadow_type) fleche.set(arrow_type, shadow_type)
Le premier crée une flèche, en prenant en compte le type et le style demandés. Le second appel permet de modifier ces valeurs après la création. L'argument arrow_type (type de flèche) peut prendre l'une des valeurs suivantes :
ARROW_UP # haut ARROW_DOWN # bas ARROW_LEFT # gauche#!/usr/bin/env python ARROW_RIGHT # droite
Ces valeurs indiquent évidemment la direction dans laquelle pointera la flèche. Les valeurs possibles pour l'argument shadow_type (type d'ombre) sont :
SHADOW_IN # empreinte SHADOW_OUT # relief (par défaut) SHADOW_ETCHED_IN # contour en empreinte SHADOW_ETCHED_OUT # contour en relief
Le programme exemple fleches.py donne un aperçu de l'utilisation du widget gtk.Arrow. La Figure 9.2 montre la fenêtre que l'on obtient au lancement du programme :
Voici le code source de fleches.py :
1 #!/usr/bin/env python
2
3 # exemple fleches.py
4
5 import pygtk
6 pygtk.require('2.0')
7 import gtk
8
9 # On cree une fleche avec les parametres specifies
10 # et on la place dans un bouton
11 def cree_fleche_bouton(type, ombre):
12 bouton = gtk.Button();
13 fleche = gtk.Arrow(type, ombre);
14 bouton.add(fleche)
15 bouton.show()
16 fleche.show()
17 return bouton
18
19 class Fleches:
20 def __init__(self):
21 # Creation d'une fenetre
22 fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
23
24 fenetre.set_title("Fleches dans boutons")
25
26 # C'est une bonne idee de faire ceci pour chaque fenetre
27 fenetre.connect("destroy", gtk.main_quit)
28
29 # On fixe la largeur des bordures de la fenetre
30 fenetre.set_border_width(10)
31
32 # On cree une boite pour contenir les boutons/fleches
33 boite = gtk.HBox(False, 0)
34 boite.set_border_width(2)
35 fenetre.add(boite)
36
37 # On place et on affiche tous nos widgets
38 boite.show()
39
40 bouton = cree_fleche_bouton(gtk.ARROW_UP, gtk.SHADOW_IN)
41 boite.pack_start(bouton, False, False, 3)
42
43 bouton = cree_fleche_bouton(gtk.ARROW_DOWN, gtk.SHADOW_OUT)
44 boite.pack_start(bouton, False, False, 3)
45
46 bouton = cree_fleche_bouton(gtk.ARROW_LEFT, gtk.SHADOW_ETCHED_IN)
47 boite.pack_start(bouton, False, False, 3)
48
49 bouton = cree_fleche_bouton(gtk.ARROW_RIGHT, gtk.SHADOW_ETCHED_OUT)
50 boite.pack_start(bouton, False, False, 3)
51
52 fenetre.show()
53
54 def main():
55 gtk.main()
56 return 0
57
58 if __name__ == "__main__":
59 Fleches()
60 main()