Archive for the 'Programación' Category

Selección multiple

Lunes, Septiembre 10th, 2007

En Trabajando con GtkTreeView en Python explicaba como utilizar el complejo pero versatil widget GtkTreeView. Sin embargo, faltaba un detalle importante: ¿como usar selección múltiple?

Lo primero es poner el selector del GtkTreeView en modo de selección múltiple:

treeview.get_selection().set_mode(gtk.SELECTION_MULTIPLE)

Ahora ya podremos marcar más de una fila simultáneamente usando las teclas Mayúsculas y Control.

Leer los elementos marcados es tan sencillo como obtener primero el iterador y el arbol:

tree,iter = self.z88tree.get_selection().get_selected_rows()

Si el iterador es None, no hay ninguna fila seleccionada, pero si lo está, no tenemos más que recorrer los elementos del iterador para acceder a las filas. Con ellas, podemos usar el método get_value del arbol para obtener el valor de cada una.

En este ejemplo almacenamos en la lista ret el valor de la columna cero de cada fila seleccionada:

ret = []
for item in iter:
ret.append(tree.get_value(tree.get_iter(item),0))

Fácil, fácil, para toda la familia.

Trabajando con PyCairo y GTK

Miércoles, Junio 20th, 2007

En la nueva versión de DeVeDe (que espero sacar en un par de días) he tenido que trabajar con Cairo para poder generar menús para el disco. La información la saqué de este tutorial sobre PyCairo (en inglés), en donde viene mucha información interesante. Sin embargo, faltaba un detalle importante: como mostrar el dibujo hecho en cairo en una ventana GTK.

En efecto, esto era fundamental porque el usuario tiene que poder ver el resultado final del menú antes de generar el disco (para, por ejemplo, asegurarse de que los títulos no son demasiado largos), y para eso necesito pintarlo en una ventana y no sólo volcarlo a un PNG en disco. Después de mucho buscar y de hacer varias pruebas encontré por fin como hacerlo. (more…)

Trabajando con GtkTreeView en Python

Sábado, Enero 27th, 2007

Esta semana tuve que trabajar en serio con el widget GtkTreeView en Python y se me hizo completamente cuesta arriba hasta que, después de buscar en múltiples tutoriales y pelearme con el código, me vino una epifanía y entendí su complejo pero potente esquema de funcionamiento; así que, en base a la experiencia adquirida, voy a escribir un pequeño tutorial, acompañado de algo de código para ejemplificar.

En GtkTreeView tenemos una clara división entre los datos, la presentación y el motor. Esto es lo que hace que sea un poco lioso al principio, pero también le da una potencia y versatilidad sorprendente. (more…)

Python, MySQL, UTF-8 y la madre que los parió

Domingo, Diciembre 10th, 2006

Errar es humano, pero para liar las cosas de verdad se necesita un ordenador… que trabaje con UTF-8.

Para los que no lo conozcan, UTF-8 es una codificación multibyte para la tabla de caracteres UNICODE. Un caracter UNICODE está representado por un número entre 0 y 1,114,111, y UTF-8 es un sistema para representar dicho número mediante una secuencia de bytes. Su característica más atractiva es que los primeros 128 caracteres se corresponden con los de la tabla ASCII y, además, ocupan un solo byte, lo que significa que un texto en ASCII estándar (de 7 bits) es, a la vez, un texto UTF-8; sin embargo, tan pronto comenzamos a usar otros caracteres más raros (como nuestra querida letra Ñ, o nuestras vocales acentuadas), ocuparemos dos, tres o hasta cuatro bytes por caracter.

(more…)

Panel desplazable

Jueves, Noviembre 23rd, 2006

Una de las limitaciones del .NET Compact Framework es que, al contrario que el Framework completo, no dispone de un panel con barras de desplazamiento. El único control que se le parece es el Panel (así, a secas), que consiste en un contenedor de tamaño variable en el que se pueden insertar tantos widgets como se desee, en las coordenadas que se quiera.

Sin embargo, para el trabajo que estoy haciendo necesitaba un panel con barras desplazables, así que busqué en la red y encontré un truco: hacer un panel del tamaño que se necesite, colocar dentro los elementos deseados, añadir dos barras de desplazamiento fuera del panel y hacer que éstas cambien las coordenadas X e Y de éste, de manera que se mueva por toda la pantalla. Esta solución es aceptable cuando sólo se desea un único panel que ocupe toda la pantalla, pero en mi caso no servía porque yo necesitaba poder colocar más elementos fijos, con lo que el panel sólo ocuparía una parte.

(more…)

Primeras diferencias del Compact Framework

Jueves, Octubre 19th, 2006

Actualizado. Empiezan a aparecer las primeras diferencias y limitaciones del Compact Framework .NET. La primera es que el widget TrackBar no incluye el evento Scroll, que se dispara cuando el usuario mueve el desplazador. El único disponible es ValueChanged, que se dispara tanto cuando es el usuario quien mueve el desplazador como cuando lo hace el programa al cambiar el valor del TrackBar.

La segunda diferencia está en el widget Label, en concreto en la propiedad TextAlign, la cual sólo admite TopLeft, TopCenter y TopRight, haciendo caso omiso de MiddleXXXX y BottomXXXX.

Mañana más.

Actualización a 22/10. Otra diferencia más: la clase Stack, que implementa una pila, no dispone del método Clear.

Programando para Windows Mobile 5 con Mono (parte 2)

Sábado, Octubre 7th, 2006

Ahora que ya establecimos contacto entre la PDA y el PC podemos empezar la parte de programación.

Windows Mobile 5 incorpora una máquina virtual de .NET, por lo que, en principio, parece que podemos utilizar Mono directamente para escribir un programa, transferir el .exe directamente a la PDA y ejecutarlo. Por desgracia la cosa no es tan sencilla, pues las PDAs disponen de una versión reducida de .NET denominada .NET Compact Framework. Se trata, básicamente, de un subconjunto de la máquina virtual clásica, por lo que hay una serie de clases y métodos que no estarán disponibles. Es por esta razón que los ejecutables .NET para PDAs usan una firma digital diferente que los que son para equipos clásicos, y por eso si intentamos ejecutar en una PDA un programa hecho con Mono recibiremos un mensaje de error, indicándonos que ese fichero no es un programa válido.

(more…)

Programando para Windows Mobile 5 con Mono

Domingo, Octubre 1st, 2006

La política no es la única que hace extraños compañeros de cama: en estos momentos estoy compartiendo mi vida con una PDA con Windows Mobile 5.

La razón es que, por motivos laborales, tengo que escribir un programa para dicho sistema operativo, y aunque los entornos de desarrollo de Micro$oft son conocidos por su gran calidad, la idea de cambiar mi escritorio del trabajo a Windows (con todo lo que ello conlleva: configurar de nuevo el programa de correo, enlaces del navegador, etc) me tiraba mucho para atrás. Por eso decidí realizar el programa con .NET, para lo cual podría usar Mono y MonoDevelop desde GNU/Linux. Además podría vender la moto de que el mismo programa también les funcionará en GNU/Linux…

(more…)