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 xalign
et
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.
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()