El control de marco proporcional es como un control de marco, excepto en que también mantiene el cociente de proporcionalidad (esto es, el cociente del ancho entre el alto) del control hijo en un determinado valor, añadiendo espacio extra si es necesario. Esto es útil, por ejemplo, si se quiere previsualizar una imagen más grande. El tamaño de la previsualización debería variar cuando el usuario redimensione la ventana, pero el cociente de proporcionalidad debe siempre corresponderse al de la imagen original.
Para crear un nuevo marco proporcional se utiliza:
aspect_frame = gtk.AspectFrame(label=None,xalign=0.5,yalign=0.5,ratio=1.0,obey_child=TRUE)
label especifica el texto a mostrar en el título.
xalign e yalign especifican la alineación
como en el control
Alignment. Si
obey_child es TRUE, el cociente de
proporcionalidad de un
control hijo se corresponderá con el cociente de proporcionalidad del tamaño
ideal que solicite. En caso contrario, se especifica dicho cociente con el
argumento ratio.
Para cambiar las opciones de un marco proporcional existente, se puede utilizar:
aspect_frame.set(xalign=0.0,yalign=0.0,ratio=1.0,obey_child=TRUE)
Como ejemplo, el programa aspectframe.py
usa un AspectFrame para presentar un área de dibujo
cuyo cociente de proporcionalidad será siempre 2:1, aunque el usuario
redimensione la ventana contenedora. La figura
Figura 10.5, “Ejemplo de Marco Proporcional” muestra la ventana del programa:
El código fuente del programa aspectframe.py es:
1 #!/usr/bin/env python
2
3 # ejemplo aspectframe.py
4
5 import pygtk
6 pygtk.require('2.0')
7 import gtk
8
9 class AspectFrameExample:
10 def __init__(self):
11 window = gtk.Window(gtk.WINDOW_TOPLEVEL);
12 window.set_title("Aspect Frame")
13 window.connect("destroy", lambda x: gtk.main_quit())
14 window.set_border_width(10)
15
16 # Creamos un marco proporcional aspect_frame y lo añadimos a la ventana
17 aspect_frame = gtk.AspectFrame("2x1", # label
18 0.5, # center x
19 0.5, # center y
20 2, # xsize/ysize = 2
21 gtk.FALSE) # ignore child's aspect
22 window.add(aspect_frame)
23 aspect_frame.show()
24
25 # Añadimos un control hijo al marco proporcional
26 drawing_area = gtk.DrawingArea()
27
28 # Solicitamos una ventana 200x200, pero AspectFrame nos devolverá una 200x100
29 # puesto que forzamos una proporción 2x1
30 drawing_area.set_size_request(200, 200)
31 aspect_frame.add(drawing_area)
32 drawing_area.show()
33 window.show()
34
35 def main():
36 gtk.main()
37 return 0
38
39 if __name__ == "__main__":
40 AspectFrameExample()
41 main()