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

10.6. Les cadres proportionnels (AspectFrame)

Le cadre proportionnel est semblable au widget cadre, en outre il maintient le rapport largeur/hauteur du widget enfant à sa valeur en ajoutant de l'espace supplémentaire si nécessaire. Ceci est utile si, par exemple, vous voulez présenter une image plus grande. La taille de la prévisualisation peut varier lorsque l'utilisateur redimensionne la fenêtre, mais les proportions de l'image doivent toujours correspondre à l'image originale.

Pour créer un cadre proportionnel, on utilise :

  cadre_prop = gtk.AspectFrame(label=None, xalign=0.5, yalign=0.5, ratio=1.0, obey_child=TRUE)

... où l'étiquette label indique le texte qui sera affiché, les paramètres xalignet yalign indiquent l'alignement comme décrit dans gtk.Alignment. Si le paramètre obey_child vaut TRUE, les proportions du widget enfant correspondront à la taille idéale qu'il demande, autrement elles seront données par la valeur de ratio.

Pour modifier les arguments d'un cadre proportionnel existant, on utilise :

  cadre_prop.set(xalign=0.0, yalign=0.0, ratio=1.0, obey_child=TRUE)

En exemple, le programme aspectframe.py utilise un cadre proportionnel AspectFrame pour offrir une zone de dessin dont le rapport de proportions sera toujours de 2/1, quel que soit la manière dont l'utilisateur redimensionne la fenêtre. La Figure 10.5, « Exemple de cadre proportionnel » montre l'affichage du programme.

Figure 10.5. Exemple de cadre proportionnel

Exemple de cadre proportionnel
Exemple de cadre proportionnel

Voici le code du programme aspectframe.py :

     1   #!/usr/bin/env python
     2   # -*- coding:utf-8 -*-
     3   # exemple aspectframe.py
     4   
     5   import pygtk
     6   pygtk.require('2.0')
     7   import gtk
     8   
     9   class ExempleAspectFrame:
    10       def __init__(self):
    11           fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL);
    12           fenetre.set_title("Cadre_proportionnel")
    13           fenetre.connect("destroy", lambda x: gtk.main_quit())
    14           fenetre.set_border_width(10)
    15   
    16           # Créer un cadre proportionnel - l'ajouter à la fenêtre principale
    17           cadre_prop = gtk.AspectFrame("2x1", # étiquette
    18                                          0.5, # x centré dans la fenêtre à
    19                                          0.5, # y centré dans la fenêtre à
    20                                          2, # rapport x/y = 2
    21                                          False) # ignorer taille des widgets enfant
    22           fenetre.add(cadre_prop)
    23           cadre_prop.show()
    24   
    25           # Ajouter un widget enfant dans le cadre proportionnel
    26           zone_dessin = gtk.DrawingArea()
    27   
    28           # Déclarer une fenêtre de 200x200 mais le cadre proportionnel
    29           # avec un rapport de 2x1 affiche une zone de 200x100
    30           zone_dessin.set_size_request(200, 200)
    31           cadre_prop.add(zone_dessin)
    32           zone_dessin.show()
    33           fenetre.show()
    34   
    35   def main():
    36       gtk.main()
    37       return 0
    38   
    39   if __name__ == "__main__":
    40       ExempleAspectFrame()
    41       main()