10.5. Marcos (Frame)

Los Marcos se pueden usar para encerrar un widget o un grupo de ellos dentro de una caja que, opcionalmente, puede llevar un título. La posición del título y el estilo de la caja se puede alterar a gusto.

Un Frame (Marco) se puede crear con la siguiente función

  frame = gtk.Frame(label=None)

El label (título) se coloca en la esquina superior izquierda del marco de manera predeterminada. Especificando un valor de None para el argumento label o sin especificar el argumento label hará que no se visualice ningún título. El texto del título se puede cambiar usando el método:

  frame.set_label(label)

La posición del título se puede cambiar usando el método:

  frame.set_label_align(xalign, yalign)

xalign y yalign toman valores entre 0.0 y 1.0. xalign indica la posición del título en la horizontal superior del marco. yalign no se usa por ahora. El valor por defecto de xalign es 0.0 lo que coloca al título en la esquina izquierda del marco.

El siguiente método modifica el estilo de la caja que se usa para rodear el marco.

  frame.set_shadow_type(type)

El argumento type puede tomar uno de los siguientes valores:

  SHADOW_NONE           # sin sombra
  SHADOW_IN             # sombra hacia dentro
  SHADOW_OUT            # sombra hacia fuera
  SHADOW_ETCHED_IN      # sombra marcada hacia dentro (valor predeterminado)
  SHADOW_ETCHED_OUT     # sombra marcada hacia fuera

El ejemplo frame.py muestra el uso del control Marco. La figura Figura 10.4, “Ejemplo de Marco” muestra la ventana resultante:

Figura 10.4. Ejemplo de Marco

Ejemplo de Marco

EL código fuente de frame.py es:

    1	#!/usr/bin/env python
    2	
    3	# ejemplo frame.py
    4	
    5	import pygtk
    6	pygtk.require('2.0')
    7	import gtk
    8	
    9	class FrameExample:
   10	    def __init__(self):
   11	        # Creamos una ventana nueva
   12	        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
   13	        window.set_title("Frame Example")
   14	
   15	        # Conectamos el evento "destroy" al manejador de señal 
   16	        window.connect("destroy", lambda w: gtk.main_quit())
   17	        window.set_size_request(300, 300)
   18	
   19	        # Fijamos el grosor del borde de ventana
   20	        window.set_border_width(10)
   21	
   22	        # Creamos un Marco
   23	        frame = gtk.Frame()
   24	        window.add(frame)
   25	
   26	        # Fijamos la etiqueta del marco
   27	        frame.set_label("GTK Frame Widget")
   28	
   29	        # Alineamos la etiqueta a la derecha del marco
   30	        frame.set_label_align(1.0, 0.0)
   31	
   32	        # Fijamos el estilo del marco
   33	        frame.set_shadow_type(gtk.SHADOW_ETCHED_OUT)
   34	        frame.show()
   35	  
   36	        # Mostramos la ventana
   37	        window.show()
   38	
   39	def main():
   40	    # Entramos en el bucle de eventos
   41	    gtk.main()
   42	    return 0
   43	
   44	if __name__ == "__main__":
   45	    FrameExample()
   46	    main()

Los programas calendar.py, label.py y spinbutton.py también usan Marcos.