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