[Python-mx] Ejemplo layout_listbox_example

Noe Nieto nnieto at noenieto.com
Fri Jul 29 00:42:12 EDT 2016


Ahi te va. Linea por linea.

Primero genera una lista de cadenas a partir de otra cadena

    items = 'This is a sorted ListBox Fail'.split()

Luego toma la lista de cadenas (items); por cada cadena (item) vas a
agregar una fila (ListBoxRow) y a cada fila le vas a asociar un
"dato". Ese dato podria ser cualquier objeto, en este caso es una
cadena (item).

        for item in items:
            listbox_2.add(ListBoxRowWithData(item))

La manera en que ListBox va a mostrar algo es recorriendo su lista de
filas(ListBoxRow) y pintar una por una, en el orden en que fueron
agregadas.

Pero el autor queria demostrar que podemos cambiar el orden en que se
pintan las filas (ListBoxRow). Eso se mediante una funcion de
comparacion definida por el programador (nosotros). Por eso, primero
define la funcion sortfunc:

        def sort_func(row_1, row_2, data, notify_destroy):
            return row_1.data.lower() > row_2.data.lower(

El ListBox va a recorrer cada una de las filas, de par en par, y va a
llamar la funcion sort_func() para que le diga si la primera fila va
antes o despues de la segunda fila. No se que algoritmo use para
ordenar la lista y ahorita no importa mucho, lo que importa es que
ahora ListBox esta usando sort_func() como la parte de comparacion
para su algoritmo de ordenamiento.

Seria algo asi:
sort_func("this", "is", None,False)
sort_func("is", "a", None,False)
sort_func("a", "sorted", None,False)
sort_func("sorted", "listbox", None,False)
sort_func("listbox", "fail", None,False)

El valor de retorno de sort_func() debe ser -1 si row_1 es menor que
row_2, 0 si son iguales y +1 si row_1 es mayor que row_2.

En el ejemplo solo ves una comparacion basica por que de seguro al que
escribio el ejemplo le dio flojera hacer toda la funcion checando si
es mayor, menor o igual.


Espero que te sirva.

-- Noe




El 28 de julio de 2016, 21:05, Javier Parada <jparada_a at hotmail.com> escribió:
>
> Hola,
> Estoy parado con esa duda, alguna otra ayuda?.
>
> Gracias,
> Javier
>
>
> ________________________________
> On jueves, 28 de julio de 2016 Javier Parada <jparada_a at hotmail.com> wrote:
>
> Hola,
> Es un string lo que no entiendo aquí literal es que no veo alguna condición if
>
> Según puedo leer la instrucción es, de la fila en la que se encuentra del listbox toma el string, lo pasamos a minúscula y mayor que otro dato y el otro dato de convierte en minúscula???
>
> Además en el ejemplo no veo por ningún lado row_2
>
> return row_1.data.lower() > row_2.data.lower()
>
> Este es el ejemplo http://python-gtk-3-tutorial.readthedocs.io/en/latest/layout.html
>
> Gracias,
> Javier
>
>
>
> ________________________________
> On jueves, 28 de julio de 2016 Noe Nieto wrote:
>
> Hola, no se a que ejemplo te refieres, pero revisando el codigo ....
>
> Con set_sort_func() le estas enseñando al listbox_2 cómo ordenar a sus
> filas.
>
> sort_func() toma tres parametros, pero en realidad solo esta usando los
> primeros 2. Compara la propiedad/atributo data, que de seguro son cadenas.
> Por eso el lower(). De la documentacion de GTK+3 en C [1]:
>
> < 0 if *row1* should be before *row2* , 0 if they are equal and > 0
> otherwise
> En python 0 equivale a False, asi que tal vez la comparacion la resumen en
> un simple " return x>y", pero no estroy seguro.
>
>
> -- Noe
>
>
> [1]
> https://developer.gnome.org/gtk3/stable/GtkListBox.html#GtkListBoxSortFunc
>
>
> 2016-07-27 21:41 GMT-07:00 Javier Parada :
>
> > Hola,
> >
> > Tratando de replicar (para aprender) el ejemplo
> > de layout_listbox_example.py..., en buen español, que se indica con la
> > función sort_func, es decir, qué se está comparando?, qué regresa?.
> >
> > > listbox_2 = Gtk.ListBox()
> > > items = 'This is a sorted ListBox Fail'.split()
> > >
> > > for item in items:
> > > listbox_2.add(ListBoxRowWithData(item))
> > >
> > > def sort_func(row_1, row_2, data, notify_destroy):
> > > return row_1.data.lower() > row_2.data.lower()
> > >
> > > listbox_2.set_sort_func(sort_func, None, False)
> >
> > Gracias.
> >
> > Saludos,
> > Javier
> > _______________________________________________
> > Python-mx mailing list
> > Python-mx at python.org
> > https://mail.python.org/mailman/listinfo/python-mx
> >
>
>
>
> --
> ---
> Noe Nieto
> NNieto Consulting Services
> M: nnieto at noenieto.com
> W: http://noenieto.com
> T: @tzicatl
> Li: Perfil en LinkedIn
>
> _______________________________________________
> Python-mx mailing list
> Python-mx at python.org
> https://mail.python.org/mailman/listinfo/python-mx
>



-- 
---
Noe Nieto
NNieto Consulting Services
M: nnieto at noenieto.com
W: http://noenieto.com
T:  @tzicatl
Li: Perfil en LinkedIn


More information about the Python-mx mailing list