Le conteneur Place
(Fixed) permet de disposer des widgets dans sa
fenêtre, à une position précise, par rapport au coin supérieur gauche.
Cette position peut être modifiée de manière dynamique.
Il existe seulement trois appels associés
au conteneur Fixed
conteneur_place = gtk.Fixed() conteneur_place.put(widget,x,y) conteneur_place.move(widget,x,y)
La fonction gtk.Fixed() crée un nouveau
conteneur Fixed.
La méthode put() insère le widget dans
le conteneur Fixed à la position indiquée par les paramètres
x et y.
La méthode move() permet au widget indiqué
d'être déplacé dans une nouvelle position.
Le programme
fixed.py illustre l'utilisation du
conteneur Fixed. La
Figure 10.2, « Exemple de conteneur Fixed »montre le résultat.
Voici le code du programme fixed.py :
1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3 # exemple fixed.py
4
5 import pygtk
6 pygtk.require('2.0')
7 import gtk
8
9 class ExemplePlace:
10 # Cette méthode de rappel déplace le bouton dans
11 # le conteneur place vers une nouvelle position
12 def deplace_bouton(self, widget):
13 self.x = (self.x+30)%300
14 self.y = (self.y+50)%300
15 self.place.move(widget, self.x, self.y)
16
17 def __init__(self):
18 self.x = 50
19 self.y = 50
20
21 # On crée une nouvelle fenêtre
22 fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
23 fenetre.set_title("Conteneur Fixed")
24
25 # On connecte l'évènement "destroy" au gestionnaire de signal
26 fenetre.connect("destroy", lambda w: gtk.main_quit())
27
28 # On indique la largeur des bordures de la fenêtre
29 fenetre.set_border_width(10)
30
31 # On crée le conteneur Fixed (place)
32 self.place = gtk.Fixed()
33 fenetre.add(self.place)
34 self.place.show()
35
36 for i in range(1, 4):
37 # On crée un bouton avec un label "Appuyez !"
38 bouton = gtk.Button("Appuyez !")
39
40 # Lorsque le bouton reçoit le signal "clicked",
41 # il appelle la méthode deplace_bouton().
42 bouton.connect("clicked", self.deplace_bouton)
43
44 # Ceci place le bouton dans la fenêtre du conteneur
45 self.place.put(bouton, i*50, i*50)
46
47 # La dernière tâche est d'afficher ce nouveau bouton.
48 bouton.show()
49
50 # On affiche la fenêtre
51 fenetre.show()
52
53 def main():
54 # Boucle principale
55 gtk.main()
56 return 0
57
58 if __name__ == "__main__":
59 ExemplePlace()
60 main()