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()
|