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