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

6.3. Les cases à cocher

Les case à cocher héritent de nombreuses propriétés et méthodes des boutons à bascules vus précédemment. Leur aspect est cependant différent : il ne s'agit plus de boutons avec du texte à l'intérieur mais de petits carrés portant le texte à leur droite. Elles servent souvent pour activer/désactiver des options dans les applications.

La méthode de création est semblable à celle des boutons normaux :

  case_a_cocher = gtk.CheckButton(label=None)

Si l'argument label est fourni, la méthode crée une case à cocher avec une étiquette à son côté. Le texte donné sera inspecté à la recherche de caractères mnémoniques (préfixés par '_').

Les opérations de vérification et de définition de l'état des cases à cocher sont identiques à celles des boutons à bascule.

Le programme casesacocher.py donne une exemple d'utilisation des cases à cocher. La figure 6.3 montre la fenêtre obtenue :

Figure 6.3. Exemple de cases à cocher

Voici le code source du programme casesacocher.py :

     1   #!/usr/bin/env python
     2   
     3   # exemple casesacocher.py
     4   
     5   import pygtk
     6   pygtk.require('2.0')
     7   import gtk
     8    
     9   class Casesacocher:
    10       # Notre fonction de rappel. Le parametre "donnees"
    11       # transmis a cette methode est affiche sur stdout
    12       def fct_rappel(self, widget, donnees=None):
    13           print "La %s a ete %s." % (donnees, ("desactivee", "activee")[widget.get_active()])
    14   
    15       # Cette fonction de rappel quitte le programme
    16       def evnmt_delete(self, widget, evenement, donnees=None):
    17           gtk.main_quit()
    18           return gtk.FALSE
    19   
    20       def __init__(self):
    21           # Creation d'une nouvelle fenetre.
    22           self.fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
    23   
    24           # On definit le titre de la fenetre.
    25           self.fenetre.set_title("Cases a cocher")
    26   
    27           # On definit un gestionnaire de signal pour "delete_event",
    28           # qui quitte GTK immediatement.
    29           self.fenetre.connect("delete_event", self.evnmt_delete)
    30   
    31           # On fixe la largeur des bordures de la fenetre.
    32           self.fenetre.set_border_width(20)
    33   
    34           # Creation d'une boite verticale.
    35           boite_v = gtk.VBox(True, 2)
    36   
    37           # On place la VBox dans la fenetre principale.
    38           self.fenetre.add(boite_v)
    39   
    40           # Creation du premier bouton.
    41           bouton = gtk.CheckButton("case a cocher 1")
    42   
    43           # Lorsque l'on change l'etat du bouton, la methode fct_rappel() est
    44           # appelee, avec un pointeur sur "case a cocher 1" comme argument.
    45           bouton.connect("toggled", self.fct_rappel, "case a cocher 1")
    46   
    47   
    48           # Insertion du bouton 1 dans le quart superieur gauche du tableau.
    49           boite_v.pack_start(bouton, True, True, 2)
    50   
    51           bouton.show()
    52   
    53           # Creation du deuxieme bouton.
    54   
    55           bouton = gtk.CheckButton("case a cocher 2")
    56   
    57           # Lorsque l'on change l'etat du bouton, la methode fct_rappel() est
    58           # appelee, avec un pointeur sur "case a cocher 2" comme argument.
    59           bouton.connect("toggled", self.fct_rappel, "case a cocher 2")
    60           # Insertion du bouton 2 dans le quart superieur droit du tableau.
    61           boite_v.pack_start(bouton, True, True, 2)
    62   
    63           bouton.show()
    64   
    65           # Creation du bouton "Quitter".
    66           bouton = gtk.Button("Quitter")
    67   
    68           # Lorsque l'on clique sur le bouton, la fonction mainquit() est
    69           # appelee et le programme se termine.
    70           bouton.connect("clicked", lambda wid: gtk.main_quit())
    71   
    72           # Insertion du bouton "Quitter" dans les deux quarts inferieurs du tableau.
    73           boite_v.pack_start(bouton, True, True, 2)
    74   
    75           bouton.show()
    76           boite_v.show()
    77           self.fenetre.show()
    78   
    79   def main():
    80       gtk.main()
    81       return 0       
    82    
    83   if __name__ == "__main__":
    84       Casesacocher()
    85       main()