30 jun. 2011

GtkBuilder y Python Parte 7


Si ya vas en la parte 7 es bueno que mires las anteriores

Aprendiendo GtkBuilder y Python Parte 1

GtkBuilder, Glade y Python Parte 2

GtkBuilder, Glade y Python Parte 3


Es hora de una nueva entrega, se que vamos rápido con esto pero si hay dudas pueden preguntar. La idea es terminar de publicar estos tutoriales para comenzar a programar algunas cosas nuevas que me gustaría enseñarles, pero todo con calma. Vamos a terminar esto y lo vamos a hacer bien.

En esta corta entrada vamos a configurar el Combobox
Y vamos a entender como se puede hacer Orden Aleatorio y Orden Alfabético en Python.

La verdad esto es bastante simple pero tendremos que volver un momentito a glade a realizar algo que olvidamos antes y es crear una señal cuando el combobox cambie.
Después de realizado esto en Glade podemos volver de nuevo sobre el codigo en Python.

Lo primero sera agregar al builder el OrderList que habíamos creado en glade.

self.combolist = builder.get_object("combobox1")

Lo segundo sera agregar al diccionario la señal que creamos en glade.

"on_ComboOrder_changed": self.newList,

Después vamos a crear la definición newList, que sera la encargada de hacer los cambios cuando se seleccione alguna de las opciones del combobox.
Explico entonces el código.

La linea 3 define una variable de nombre var que básicamente sera un valor numérico que se obtiene de la lista dentro del combobox si se selecciona el primer elemento del combobox este tendrá un numero 0 si se selecciona el segundo tendrá un valor de 1 y así para demás opciones. Esto se hace con que get_active(). Si el valor de var es igual a 0 quiere decir que se selecciono la opción Aleatorio.

Lo primero que se hace es crear una variable contadora n que arranca en 0 y entonces se itera sobre cada uno de los elementos dentro del Medialist. Si hay 20 canciones entonces itera de una en una sobre las 20, al final el contador n mostrara 19 elementos. Con estos elementos se crea un indice o una lista, como le quieran decir, esta arranca en 0 y termina en 19 para este ejemplo, eso es posible gracias al comando range().

La linea 19 dice shuffle(index) bueno shuffle es un modulo de python que simplemente podemos importarlo, este modulo crea valores aleatorios basados en una lista. Agregamos entonces en la parte superior el modulo ramdon y de este importamos shuffle.

from random import shuffle

Con eso hemos terminado de crear un nuevo listado aleatorio, si el largo o len() de la lista index es mayor que 1 entonces si aplica el comando reorder() que es un comando de Gtk que permite reordenar una Gtk.Liststore basado en un nuevo orden.

#Definicion para ordernar la lista def newList(self, widget): var = self.combolist.get_active() #Si se activa Aleatorio if var == 0: n = 0 for musicfiles in self.medialist: n += 1 index = range(0, n) shuffle(index) #Reorganiza la lista de musica llamad medialist if len(index) > 1: self.medialist.reorder(index) #Si se activa Alfabetico if var == 1: iter=self.medialist.get_iter_first() newlistfiles = [] while iter: files = self.medialist.get_value(iter,0) source = self.medialist.get_value(iter,1) newlistfiles.append([files,source]) iter = self.medialist.iter_next(iter) newlistfiles = sorted(newlistfiles) self.medialist.clear() for files,source in newlistfiles: self.medialist.append([files,source])

Ahora si var es igual a 1 estamos hablando de alfabético, para ello tenemos que iterar sobre todos los elementos de la lista y tenemos que exportar los nombres de las canciones y guardarlos en una variable. La linea 18 se para en el Gtk.Treeview y obtiene el primero elemento con el comando get_iter_first(), este comando es parecido a get_iter_root() que obtiene el primer elemento del treeview y obtiene la ruta hasta este, recuerden que get_iter_root() ya no existen en Gtk3 pero si esta presente en Gtk2 por si lo requieren.

La linea 19 crea una variable vacía.
Mientras se itera sobre cada uno de los elementos de la lista va a obtener el nombre de los archivos que están en la columna 0 y los guardara en la variable files, esto mismo para la ruta de los archivos pero la guardara en la variable source y finalmente con el comando append() vamos a unir el nombre y la ruta y quedaran guardados en newlistfiles.
La linea 24 simplemente pasa al siguiente iter y como están dentro de un while pues el proceso se hace hasta la ultima linea.
Después de realizado este procedimiento se utiliza el comando sorted() que básicamente es una función de python que organiza los elementos de una lista de forma alfabética, para terminar borramos toda la lista que tenemos en nuestro Treeview y metemos la nueva con el comando append([files,source]) y hemos terminado de organizar nuestra lista de forma alfabética.

Espere pronto el tutorial 8.

15 jun. 2011

Casa Digital


Parte del proceso de crear una casa digital comienza cuando contamos con el hardware apropiado por eso esta entrada es la primera de unas cuantas, ahora que ya tengo de nuevo tiempo y me dispongo a contestar sus preguntas, terminar tutoriales y escribir nuevas entradas, lo primero sera mostrar que es una casa digital.

Primero tenemos a mi pc principal un Dell Inspiron N4010 que funciona excelente, este cuenta con Ubuntu 11.04  y en la segunda entrada mostrare que programas permiten integrar este computador a otros elementos de la casa.


De segundo tenemos un disco duro de marca Toshiba que se conecta al televisor y al computador, este disco es de una tera y si alguna vez requieren comprar uno, les recomiendo este porque es bien silencioso.

De tercero tenemos un televisor Samsung Led de 40" que se conecta al disco y al computador de varias formas, en este momento como pueden ver esta conectado por HDMI pero mas adelante voy a mostrar otras formas de interconectar todo esto.
El cuarto elemento es otro computador mini de Marca Samsung al cual le debo la foto, pero espero tomarla pronto para que vean como vamos integrando elementos.


Por ahora no va mas, esperen la segunda entrada contando como integrar carpetas, discos, fotos, videos, musica y demás.

3 jun. 2011

Algo ocupado

He estado algo ocupado y por eso no he terminado de publicar el tutorial de python y glade, pero esperelo muy pronto.