El control de Lista Desplegable Combo está obsoleto
a partir de la versión 2.4 de PyGTK.
La lista desplegable Combo es otro control
bastante simple que es realmente una colección de otros controles. Desde el punto de
vista del usuario, el control consiste en una caja de entrada de texto y un menú
desplegable desde el que se puede seleccionar una entrada a partir de
un conjunto predefinido. Alternativamente, el usuario puede escribir una
opción diferente directamente en la caja de texto.
El Combo tiene dos partes principales de las
que preocuparse: una entry (entrada) y una
list (lista). Se puede acceder a ellas usando los atributos:
combo.entry combo.list
Lo primero, para crear una lista desplegable, se usa:
combo = gtk.Combo()
Ahora, si se quiere fijar la cadena en la sección de la entrada de la lista desplegable, esto se hace manipulando el control entrada directamente:
combo.entry.set_text(text)
Para fijar los valores de la lista desplegable, se usa el método:
combo.set_popdown_strings(strings)
Antes de que se pueda hacer esto, hay que componer una lista con las opciones que se deseen.
Aqui tenemos el típico código para crear un conjunto de opciones:
slist = [ "String 1", "String 2", "String 3", "String 4" ] combo.set_popdown_strings(slist)
En este punto ya se tiene una lista desplegable funcionando. Hay unos cuantos aspectos de su comportamiento que se pueden cambiar. Esto se consigue con los métodos:
combo.set_use_arrows(val) combo.set_use_arrows_always(val) combo.set_case_sensitive(val)
El método set_use_arrows() permite al usuario
cambiar el valor de la entrada usando las teclas de flecha arriba/abajo cuando
val se pone a TRUE. Esto no despliega la lista,
si no que sustituye el texto actual de la entrada con la siguiente entrada de la lista
(arriba o abajo, según la combinación de tecla indique). Esto se hace buscando
en la lista el elemento correspondiente al valor actual de la entrada y
seleccionando el elemento anterior/siguiente correspondiente. Normalmente en
una entrada las teclas de flecha se usan para cambiar el foco (también puedes
hacer esto usando el tabulador). Ten en cuenta que cuando el elemento actual
es el último de la lista y pulsas la tecla flecha abajo se cambia el foco (lo
mismo ocurre cuando estas en el primer elemento y pulsas la tecla flecha
arriba).
Si el valor actual de la entrada no está en la lista, el método
set_use_arrows() se desactiva.
El método set_use_arrows_always() , cuando
val es TRUE, también permite al usuario el uso
de las teclas de flecha arriba/abajo para ciclar por las opciones de la lista desplegable,
excepto que da la vuelta a los valores de la lista, desactivando por completo
el uso de las flechas arriba y abajo para cambiar el foco.
El método set_case_sensitive() dice si GTK
busca o no las entradas de una forma sensible a mayúsculas. Esto se usa cuando
se le pide al control Combo que busque un valor de la
lista usando la entrada actual de la caja de texto. Este completado puede
producirse de forma sensible o insensible a mayúsculas, dependiendo de lo que
le pasemos a este método. El control Combo también puede
simplemente completar la entrada actual si el usuario pulsa la combinación
de teclas MOD-1+Tab.
MOD-1 normalmente corresponde a la tecla Alt,
gracias a la utilidad xmodmap. Ten en cuenta, sin embargo,
que algunos manejadores de ventana también usan esta combinación de teclas,
lo que inutilizará su uso en GTK.
Ahora que tenemos una lista desplegable, y que tiene la apariencia y
el comportamiento que queremos, lo único que nos falta es la capacidad de
obtener los datos de la lista desplegable. Esto es relativamente directo. La
mayoría del tiempo, de lo único que en necesario preocuparse es de obtener los
datos de la entrada. La entrada es accesible simplemente como
combo.entry. Las dos cosas fundamentales que se querrán
hacer con ella es conectarle la señal "activate", que indica que el usuario
ha pulsado la tecla Return o la tecla Enter,
y leer el texto. Lo primero se consigue usando algo como:
combo.entry.connect("activate", my_callback, my_data)
Obtener el texto en cualquier momento se consigue simplemente usando el siguiente método:
string = combo.entry.get_text()
Eso es todo lo importante. Hay un método:
combo.disable_activate()
que desactivará la señal "activate" en el control de entrada de la lista desplegable. Personalmente, no se me ocurre ninguna situación en la que se quiera usar, pero existe.