Saltar al contenido

Blog

Python es un lenguaje interpretado, lo que quiere decir que los programas que creamos no necesitan ser compilados pero si "necesitamos tener instalado el interprete" para que funcione.

Para demostrar brevemente la potencia de este lenguaje y su relativa simpleza, voy a mostrar cómo con unas pocas líneas de código (y lógicamente el entorno adecuado), se pueden hacer cosas bastante interesantes.

Voy a comenzar por un proyecto que tiene como objetivo mostrar un ícono en la llamada tray bar ó bandeja de sistema.

Para comenzar vamos a necesitar importar la biblioteca pystray del compañero Moses Palmér y para eso vamos a tener que "instalarla".

Esto es tan simple como escribir el siguiente comando en una consola:

O bien, si usan PyCharm y un virtualEnv pueden ir a Settings...->Project:[su_proyecto]->Project Interpreter y sobre el lado derecho tendrán un ícono en forma de "+" de color verde, lo buscan como pystray ahí y luego hacen clic en Install Package.

Entonces, una vez instalada, en un archivo que en mi caso creé con el nombre prueba.py, agregamos la línea que importa la biblioteca, tan simple como esto:

Lo próximo quizás hayan formas más sencillas de hacerlo, pero para este ejemplo me pareció más interesante de esta manera, porque es todo código y no hay que agregar archivos extra al proyecto. Es el caso del ícono que va a aparecer. Generaremos entonces una imágen muy simple de 4 cuadrados en 2 colores (esto aparece justamente en una documentación de la biblioteca: pystray Package Documentation). Para poder hacerlo necesitamos importar 2 módulos de PIL (que me parece que ya viene instalada o se instala con la otra biblioteca como dependencia, sino tocará instalarla, se llama Pillow) y lo realizamos de esta forma:

Entonces, generamos la imágen que queremos como ícono:

Y ahora viene la magia... como decía Luis Brandoni en Esperando la carroza: "sólo 3 empanadas, ¡qué miseria!". En este caso, con las siguientes míseras 4 líneas de código, tendremos funcionando el programita:

A continuación, con el siguiente comando en una consola...

tenemos como resultado un 'hermoso'... e insignificante ícono en la bandeja del sistema.

Bueno, como habrán notado, la única forma de salir es cancelando la ejecución desde la consola, así que para considerar el ejemplo "terminado", habría que agregarle al menos la opción para salir. Esto también es muy sencillo.

Debemos agregar al principio del código, la función que será invocada por la opción del menú contextual del ícono:

Creamos un menú con una sola opción, "Salir".

Y a la creación del ícono (para ser más exacto, a los argumentos del método Icon) le agregamos el menú y aprovechamos a agregarle también un ToolTip con un mensaje cuando nos paramos encima, algo así:

¡Nuestro programa ahora tiene la opción de salir!

Una optimización interesante al código, para no tener que tipear de más cuando queramos ampliar el menú sería importar el método MenuItem con un alias:

De esta forma, cuando agregamos opciones al menú, lo haremos siempre de la siguiente forma:

Ahorrándonos escribir 12 caracter cada vez que tipeamos un nuevo item.

Entonces, el código completo se vería parecido a esto:

Por alguna razón la entrada anterior no se guardó correctamente; no solo no figura en el sitio sino que tampoco es posible acceder con el enlace...

El problema fue la configuración de los enlaces permanentes. En las muchas pruebas que hice para poder hacer que la URL personalizada aparezca correctamente se eliminaron los datos del archivo .httaccess y ahí están guardados los datos de las redirecciones que permiten el uso de los enlaces permanentes.

Ingresando a la configuración y guardando se vuelven a generar las entradas correspondientes y todo funciona de nuevo.

Los últimos retoques del sitio para empezar. Un hosting gratuito con un certificado seguro gratuito. Me costó un poco darme cuenta del porqué de los TOO_MANY_REDIRECTS y al final terminó siendo que entre todas las pruebas me había dejado un par de NameServers de más en la configuración de CloudFlare.

www.000webhost.com