Vous êtes à peu près ici : Accueil  »   tutoriel PyGTK  »   PyGTK : sommaire

9.3. Les infobulles

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 :

Figure 9.3. Exemple d'infobulle

exemple d'infobulle

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 :-)