Cómo usar: ComboBox (I)


Vamos a analizar en este tutorial el uso de los ComboBox.
Como siempre, vamos a utilizar Geany como IDE, Glade y Python.

Comencemos:
Abrimos Glade y creamos una ventana, una botonera de un solo elemento, y dentro de esta botonera, un ComboBox (caja combo).

Le damos nombres a los elementos (es bueno acostumbrarse a hacerlo). Para este tutorial le puse “ventanaprincipal” a la ventana y “combo” al ComboBox.
Damos el manipulador “on_ventanaprincipal_destroy” a la señal destroy de la ventana y guardamos el archivo, en mi caso le puse el nombre “combo.xml”.

Popular el ComboBox:
Veamos como hacer que nuestro ComboBox muestre una lista de elementos.

Abrimos Geany, creamos un archivo nuevo. Importamos los módulos necesarios, creamos la clase y el constructor:

import pygtk
import gtk

class combo:
def __init__(self):
builder = gtk.Builder()
builder.add_from_file("combo.xml")
self.ventanaprincipal = builder.get_object("ventanaprincipal")
self.combo = builder.get_object("combo")

builder.connect_signals(self)
self.ventanaprincipal.show()

Ahora escribamos una función (o método) para cargar los elementos y mostrarlos en nuestro ComboBox:

def popularcombo(self):
listaelementos=gtk.ListStore(str)
listaelementos.append(["Manzanas"])
listaelementos.append(["Peras"])
listaelementos.append(["Naranjas"])

self.combo.set_model(listaelementos)
render = gtk.CellRendererText()
self.combo.pack_start(render, True)
self.combo.add_attribute(render, 'text', 0)

Como se puede ver, lo primero que se hace es crear un objeto de la clase gtk.ListStore(), que nos servirá para almacenar los elementos; el argumento str indica que vamos a almacenar cadenas de texto. Luego agregamos los elementos a la lista, y por último asociamos esa lista a nuestro ComboBox usando self.combo.set_model(). Las tres últimas líneas son las que se encargan de mostrar los elementos en el ComboBox.

Programamos el método "on_ventanaprincipal_destroy", creamos un objeto de la clase combo (la que acabamos de crear) y llamamos a su función "popularcombo()":

def on_ventanaprincipal_destroy(self, widget, data=None):
gtk.main_quit()

ejemplo = combo()
ejemplo.popularcombo()
gtk.main()

Guardamos el archivo y ejecutamos el programa:

Obtener un elemento del ComboBox:
El programa anterior no sirve de mucho si no podemos recuperar ningún elemento del ComboBox. Hagamos unas modificaciones al programa de forma que al presionar un botón se obtenga el elemento activo en ese momento.

Abrimos Glade, agregamos un elemento más a la botonera del programa anterior y colocamos un boton en el nuevo espacio (al que para este tutorial llamé "boton" y le puse de etiqueta "Click aquí"). Le damos el manipulador "on_boton_clicked" a la señal clicked del botón y guardamos el archivo.

Hagamos las modificaciones necesarias al código de nuestro programa (las nuevas líneas están en cursiva):

import pygtk
import gtk

class combo:
def __init__(self):
builder = gtk.Builder()
builder.add_from_file("combo.xml")
self.ventanaprincipal = builder.get_object("ventanaprincipal")
self.combo = builder.get_object("combo")
self.boton = builder.get_object("boton")

builder.connect_signals(self)
self.ventanaprincipal.show()

def popularcombo(self):
listaelementos=gtk.ListStore(str)
listaelementos.append(["Manzanas"])
listaelementos.append(["Peras"])
listaelementos.append(["Naranjas"])

self.combo.set_model(listaelementos)
render = gtk.CellRendererText()
self.combo.pack_start(render, True)
self.combo.add_attribute(render, 'text', 0)

def on_ventanaprincipal_destroy(self, widget, data=None):
gtk.main_quit()

def on_boton_clicked(self, widget, data=None):
model = self.combo.get_model()
activo = self.combo.get_active()
if activo >= 0:
self.boton.set_label(model[activo][0])


ejemplo = combo()
ejemplo.popularcombo()
gtk.main()

Analicemos las nuevas líneas: en el constructor agregamos el botón y más abajo creamos un nuevo método ("on_boton_clicked"). En este método lo que hacemos es obtener el modelo que está asociado a nuestro ComboBox (la lista de los elementos), obtenemos el número del elemento activo en ese momento en el ComboBox, y por último le damos uso al elemento obtenido (en este tutorial lo usamos para cambiar la etiqueta del botón).
Obs.: Si no seleccionamos ningún elemento (por defecto), el número del elemento activo es -1.

Guardamos el archivo y ejecutamos:

Al dar click al botón:



Ver más ejemplos: Popular desde archivos de texto y desde bases de datos SQLite.

1 comentarios: (+add yours?)

Diego dijo...

muchas gracias me ayudó mucho en mi inicio en glade y python, estupendo blog

Publicar un comentario