Cómo usar: ComboBox (II)

Veamos algunos ejemplos más.

Popular ComboBox desde un archivo de texto:
Supongamos que tenemos almacenada una serie de datos en un archivo de texto, por ejemplo:

Zapatos,Camisas,Pantalones,Remeras,Shorts,Gorras

En este archivo tenemos varios elementos separados por comas. Llamémoslo "Archivo.txt".
Para cargar los elementos a partir de este archivo usamos la siguiente función:

   def popularcombo(self):
      listaelementos=gtk.ListStore(str)
      archivo = open("Archivo.txt","r")
      for line in archivo.readlines():
         i = 0
         cadena = ""
         while i<len(line):
            if line[i] == ",":
               listaelementos.append([cadena])
               cadena = ""
               i = i+1
            else:
               cadena = cadena + line[i]
               i = i+1

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

Expliquemos cada línea:
Creamos la función y el objeto listaelementos, en el que vamos a almacenar nuestros elementos:
   def popularcombo(self):
      listaelementos=gtk.ListStore(str)

Abrimos el archivo:
      archivo = open("Archivo.txt","r")

Utilizamos el bucle for para que el proceso se repita por cada línea del archivo (en este ejemplo el archivo tiene una sola línea) e inicializamos algunas variables auxiliares:
      for line in archivo.readlines():
         i = 0
         cadena = ""

Con un bucle while vamos examinando cada caracter de la línea del archivo. Si se encuentra una coma, se agrega a la lista el contenido de la cadena y se vacía la cadena. Si se encuentra cualquier otro caracter, se lo añade a la cadena:
         while i<len(line):
            if line[i] == ",":
               listaelementos.append([cadena])
               cadena = ""
               i = i+1
            else:
               cadena = cadena + line[i]
               i = i+1

Por último le asignamos la lista al ComboBox y mostramos los elementos:
      self.combo.set_model(listaelementos)
      render=gtk.CellRendererText()
      self.combo.pack_start(render, True)
      self.combo.add_attribute(render, 'text', 0)

Descargar programa ejemplo

Popular ComboBox desde una base de datos SQLite:
Supongamos que tenemos una tabla con planetas y sus radios. Para mostrarlos en el ComboBox es simplemente modificar la función anterior de modo que quede de la siguiente manera (Obs.: para trabajar con bases de datos SQLite se debe importar el módulo sqlite3):

   def popularcombo(self):
      listaelementos=gtk.ListStore(str,int)
      bd = sqlite3.connect("Archivo.dat")
      cursor = bd.cursor()
      cursor.execute('SELECT * FROM planetas')
         for row in cursor:
            listaelementos.append(row)

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

Explicando:
Cargamos la base de datos y creamos el objeto cursor:
      bd = sqlite3.connect("Archivo.dat")
      cursor = bd.cursor()

Seleccionamos todos los elementos de la tabla "planetas" de nuestra base de datos y añadimos a nuestra lista cada par de datos:
      cursor.execute('SELECT * FROM planetas')
        for row in cursor:
            listaelementos.append(row)

Descargar programa ejemplo

5 comentarios: (+add yours?)

angelbotto dijo...

maravillosos tutoriales :)

ito123456789 dijo...

¡Gracias! A ver si en estos días puedo escribir un poco más. Para el fin de semana creo poder publicar algo.

Anónimo dijo...

Exelente!, muchas gracias. No sabia como empezar y probé tus ejemplos y anduvieron todos. Vengo de 15 años de VB6 y no sabia como encarar otro lenguaje multiplataforma.
Gracias

Joni Luna
joniluna@yahoo.com

Lucas dijo...

muy bien explicado, aunque yo queria hacerte otra pregunta relacionada con el tema, yo tengo un archivo.dat cargado con (artista albun año stock...etc) y lo que quiero hacer es que un combobox1 me muestre el listado de artistas para yo poder seleccionarlo y que en un Tstringgrid me muestre el resto de la información... Nose si se entiende, agradecería cualquier ayuda.

ito123456789 dijo...

Hola Lucas.. Creo que lo que llamás Tstringgrid sería algo como un Treeview en GTK. Lo que tenés que hacer es programar el manipulador para la señal changed del combobox, de modo a que cuando cambie la selección también cambie la lista que está siendo mostrada en pantalla por el treeview, podés mirar acá en el blog uno de los tutoriales sobre treeview y si necesitás más ayuda preguntarme de nuevo. Gracias!

Publicar un comentario