Le programme exemple tableaux.py crée une fenêtre avec trois boutons dans un tableau de 2x2. Les deux premiers boutons sont placés sur la ligne du haut. Le troisième, le bouton "Quitter", est placé sur la ligne du bas et occupe les deux colonnes. La figure 4.4 montre la fenêtre obtenue :
Voici le code source :
1 #!/usr/bin/env python 2 3 # exemple tableau.py 4 5 import pygtk 6 pygtk.require('2.0') 7 import gtk 8 9 class Tableau: 10 # Notre fonction de rappel. Le parametre "donnees" 11 # transmis a cette methode est affiche sur stdout 12 def salut(self, widget, donnees=None): 13 print "Salut ! - Clic sur le %s." % donnees 14 15 # Cette fonction de rappel quitte le programme 16 def evnmt_delete(self, widget, evenement, donnees=None): 17 gtk.main_quit() 18 return 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("Tableau") 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'un tableau de 2x2. 35 tableau = gtk.Table(2, 2, True) 36 37 # On place le tableau dans la fenetre principale. 38 self.fenetre.add(tableau) 39 40 # Creation du premier bouton. 41 bouton = gtk.Button("bouton 1") 42 43 # Lorsque l'on clique sur le bouton, la methode salut() est 44 # appelee, avec un pointeur sur "bouton 1" comme argument. 45 bouton.connect("clicked", self.salut, "bouton 1") 46 47 48 # Insertion du bouton 1 dans le quart superieur gauche du tableau. 49 tableau.attach(bouton, 0, 1, 0, 1) 50 51 bouton.show() 52 53 # Creation du second bouton. 54 55 bouton = gtk.Button("bouton 2") 56 57 # Lorsque l'on clique sur le bouton, la methode "salut" est 58 # appelee, avec un pointeur sur "bouton 2" comme argument. 59 bouton.connect("clicked", self.salut, "bouton 2") 60 # Insertion du bouton 2 dans le quart superieur droit du tableau. 61 tableau.attach(bouton, 1, 2, 0, 1) 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", gtk.main_quit) 71 72 # Insertion du bouton "Quitter" dans les deux quarts inferieurs du tableau. 73 tableau.attach(bouton, 0, 2, 1, 2) 74 75 bouton.show() 76 77 tableau.show() 78 self.fenetre.show() 79 80 def main(): 81 gtk.main() 82 return 0 83 84 if __name__ =="__main__": 85 Tableau() 86 main()
La classe Tableau est définie de la ligne 9 à la ligne 78.
Aux lignes 12-13, on définit la fonction de rappel salut(), appelée par un clic sur le bouton 1 ou sur le bouton 2. Elle affiche juste un message dans la console qui indique quel bouton a été cliqué, et se sert pour cela de la chaine de caractères qui lui est transmise.
Aux lignes 16-18, on définit la méthode evnmt_delete(), qui est invoquée lorsque le gestionnaire de fenêtres tente de fermer la fenêtre principale.
De la ligne 20 à la ligne 78, on définit __init__(), la méthode constructeur de la classe Tableau. Elle crée une fenêtre (ligne 22), lui donne un titre (ligne 25), connecte la fonction de rappel evnmt_delete() au signal "delete_event" (ligne 29), et fixe les bordures de la fenêtre (ligne 32). Un gtk.Table est créé à la ligne 35 et est ajouté à la fenêtre principale à la ligne 38.
Puis les deux boutons du haut sont créés (lignes 41 et 55), on connecte leurs signaux "clicked" à la méhode salut() (lignes 45 et 59) et on les place dans la première ligne du tableau (lignes 49 et 61). Pour finir, on crée le bouton "Quitter" aux lignes 66 à 73, on connecte son signal "clicked" à la fonction mainquit(), et on le place sur toute l'étendue de la seconde ligne du tableau.