16.5. Controles de Expansión (Expander)

El control Expander es un contenedor bastante simple que permite mostrar u ocultar su control hijo haciendo clic en un triángulo similar al de un TreeView. Se crean nuevos Expander con el constructor:

  expander = gtk.Expander(label=None)

donde label es una cadena de texto utilizada como etiqueta del expansor. Si label es None o no se especifica, no se crea ninguna etiqueta. Alternativamente, se puede usar la función:

  expander = gtk.expander_new_with_mnemonic(label=None)

que establece el carácter de la etiqueta precedido por un guión bajo como atajo de teclado mnemónico.

El control Expander usa la API de Container para añadir y eliminar su control hijo:

  expander.add(widget)

  expander.remove(widget)

El control hijo se puede obtener utilizando el atributo de Bin "child" o el método get_child().

La opción que controla la interpretación de los guiones bajos de la etiqueta se puede obtener y cambiar con los métodos:

  use_underline = expander.get_use_underline()

  expander.set_use_underline(use_underline)

Si se desea usar etiquetas de marcado de Pango (véase la Referencia de Marcas de Pango para más detalles) en la cadena de la etiqueta se usan los siguientes métodos para establecer y obtener el estado de la propiedad "use-markup":

  expander.set_use_markup(use_markup)

  use_markup = expander.get_use_markup()

Finalmente, se puede utilizar cualquier control como control de etiqueta utilizando el método siguiente:

  expander.set_label_widget(label_widget)

Que permite, por ejemplo, poder utilizar una HBox empaquetada con una imagen y un texto de etiqueta.

Se puede obtener y establecer el estado del Expander utilizando los métodos:

  expanded = expander.get_expanded()

  expander.set_expanded(expanded)

Si expanded es TRUE entonces e muestra el control hijo.

En la mayoría de los casos Expander hace automáticamente lo que se desea, al revelar y ocultar el control hijo. En algunos casos la aplicación puede necesitar la creación de un control hijo en el momento de la expanción. Se puede usar la señal "notify::expanded" para seguir los cambios en el estado de triángulo expansor. El manejador de la señal puede entonces crear o modificar el control hijo según se necesite.

El programa de ejemplo expander.py muestra el uso de Expander. Figura 16.11, “Control de Expansión” ilustra la ejecución del programa:

Figura 16.11. Control de Expansión

Control de Expansión

El programa crea una etiqueta Label que contiene la hora actual y la muestra cuando se expande el expansor.