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

9.8. La barre d'état

La barre d'état (gtk.Statusbar) est un widget assez simple qui sert à afficher un message textuel. Elle tient à jour une pile des messages qu'on lui a donnés, de sorte que le fait de dépiler le message courant entraine le ré-affichage du précédent.

Afin de permettre l'utilisation de la même barre d'état par différentes parties d'une application, le widget gtk.Statusbar distribue des "identifiants contextuels" qui serviront à identifier différents "utilisateurs". Le message affiché est celui qui se trouve au sommet de la pile, peu importe son contexte. Les messages sont empilés suivant le schéma dernier-entré-premier-sorti, et non suivant leur identifiant contextuel.

On crée une barre d'état avec un appel à :

  barredetat = gtk.Statusbar()

On obtient un nouvel identifiant contextuel en invoquant la méthode suivante avec une courte description textuelle du contexte (context_description) :

  context_id = barredetat.get_context_id(context_description)

Trois autres méthodes agissent sur les barres d'état :

  message_id = barredetat.push(context_id, text)

  barredetat.pop(context_id)

  barredetat.remove(context_id, message_id)

La première, push() (empiler), sert à ajouter un nouveau message à barredetat. Elle renvoie un identifiant de message (message_id). Ce dernier, accompagné du context_id approprié peut être transmis plus tard à la méthode remove() (retirer) afin de retirer le message de la pile de barredetat.

La méthode pop() retire le message, ayant le context_id spécifié, qui se trouve le plus haut placé dans la pile.

Le programme d'exemple barredetat.py crée une barre d'état ainsi que deux boutons : un pour empiler des éléments dans la barre d'état, et un autre pour dépiler le dernier élément affiché. La Figure 9.9 montre le résultat :

Figure 9.9. Exemple de barre d'état

exemple de barre d'état

Voici le code source de barredetat.py :

     1   #!/usr/bin/env python
     2   
     3   # exemple barredetat.py
     4   
     5   import pygtk
     6   pygtk.require('2.0')
     7   import gtk
     8   
     9   class ExempleBarreEtat:
    10       def empiler(self, widget, donnees):
    11           tampon = " Element %d" % self.compteur
    12           self.compteur = self.compteur + 1
    13           self.barredetat.push(donnees, tampon)
    14           return
    15   
    16       def depiler(self, widget, donnees):
    17           self.barredetat.pop(donnees)
    18           return
    19   
    20       def __init__(self):
    21           self.compteur = 1
    22           # Creation d'une fenetre
    23           fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
    24           fenetre.set_size_request(200, 100)
    25           fenetre.set_title("Exemple de barre d'etat PyGTK")
    26           fenetre.connect("delete_event", gtk.main_quit)
    27    
    28           boite_v = gtk.VBox(False, 1)
    29           fenetre.add(boite_v)
    30           boite_v.show()
    31             
    32           self.barredetat = gtk.Statusbar()      
    33           boite_v.pack_start(self.barredetat, True, True, 0)
    34           self.barredetat.show()
    35   
    36           context_id = self.barredetat.get_context_id("Exemple barredetat")
    37           
    38           bouton = gtk.Button("empiler un element")
    39           bouton.connect("clicked", self.empiler, context_id)
    40           boite_v.pack_start(bouton, True, True, 2)
    41           bouton.show()              
    42   
    43           bouton = gtk.Button("depiler le dernier element")
    44           bouton.connect("clicked", self.depiler, context_id)
    45           boite_v.pack_start(bouton, True, True, 2)
    46           bouton.show()              
    47   
    48           # On affichera toujours la fenetre a la derniere etape, de sorte que
    49           # tout apparaisse a l'ecran en un bloc.
    50           fenetre.show()
    51   
    52   def main():
    53       gtk.main()
    54       return 0
    55   
    56   if __name__ == "__main__":
    57       ExempleBarreEtat()
    58       main()