Les infobulles sont les petites chaines de texte qui apparaissent lorsque le pointeur
de la souris est maintenu quelques secondes au-dessus d'un bouton ou de tout autre widget
(à l'exception de ceux qui ne reçoivent pas d'évènements —
qui ne disposent pas de leur propre fenêtre).
Dans un premier temps, on utilise l'appel qui suit pour créer une infobulle.
Il suffit de le faire une fois pour un groupe d'infobulles donné, car l'objet
gtk.Tooltips renvoyé peut être utilisé pour en créer
de nouvelles.
infobulles = gtk.Tooltips()
Une fois créés l'infobulle ainsi que le widget auquel on souhaite la
rattacher, on utilisera simplement l'appel suivant pour appliquer la première au
second :
infobulles.set_tip(widget, tip_text, tip_private=None)
L'objet infobulles est l'infobulle que l'on a créée
auparavant. Le premier argument (widget) est le widget pour lequel elle
doit apparaitre, et le second (tip_text) le texte qu'elle doit afficher.
Le dernier argument (tip_private) est une chaine de caractères
pouvant servir d'identifiant.
Le programme exemple
infobulles.py modifie le programme
fleches.py en ajoutant une infobulle à chaque bouton. La
Figure 9.3 montre la fenêtre qu'il génère
ainsi que l'infobulle du deuxième bouton :
Voici le code source de infobulles.py
:
1 #!/usr/bin/env python
2
3 # exemple infobulles.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 Infobulles:
20 def __init__(self):
21 # Creation d'une fenetre
22 fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
23
24 fenetre.set_title("Infobulles")
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 # Creation d'un objet Tooltips
38 self.infobulles = gtk.Tooltips()
39
40 # On place et on affiche tous nos widgets
41 boite.show()
42
43 bouton = cree_fleche_bouton(gtk.ARROW_UP, gtk.SHADOW_IN)
44 boite.pack_start(bouton, False, False, 3)
45 self.infobulles.set_tip(bouton, "SHADOW_IN")
46
47 bouton = cree_fleche_bouton(gtk.ARROW_DOWN, gtk.SHADOW_OUT)
48 boite.pack_start(bouton, False, False, 3)
49 self.infobulles.set_tip(bouton, "SHADOW_OUT")
50
51 bouton = cree_fleche_bouton(gtk.ARROW_LEFT, gtk.SHADOW_ETCHED_IN)
52 boite.pack_start(bouton, False, False, 3)
53 self.infobulles.set_tip(bouton, "SHADOW_ETCHED_IN")
54
55 bouton = cree_fleche_bouton(gtk.ARROW_RIGHT, gtk.SHADOW_ETCHED_OUT)
56 boite.pack_start(bouton, False, False, 3)
57 self.infobulles.set_tip(bouton, "SHADOW_ETCHED_OUT")
58
59 fenetre.show()
60
61 def main():
62 gtk.main()
63 return 0
64
65 if __name__ == "__main__":
66 infob = Infobulles()
67 main()
Il existe d'autres méthodes utilisables avec les infobulles. En voici une liste,
accompagnée d'une brève description pour chacune :
infobulles.enable()
Active un groupe d'infobulles désactivé.
infobulles.disable()
Désactive une groupe d'infobulles activé.
infobulles.set_delay(delay)
Fixe le nombre de millisecondes que le pointeur de la souris doit rester au-dessus
du widget avant que l'infobulle apparaisse. La valeur par défaut est 500 millisecondes
(une demi-seconde).
Et voilà. C'est déjà plus qu'il n'en faut :-)