A palos con WxPython
En este artículo voy a relatar una historia que me ha pasado durante esta semana y que al final, después de investigar y leer un montón conseguí solucionar. Esta historia quiere conseguir varias cosas: la primera entretener, la segunda dejar constancia de todo lo que he tenido que pasar para solucionar el problema y que no me vuelva a pasar y la tercera, como no, ayudar a cualquier persona que tenga el mismo problema que yo. Dicho esto, vayamos con la historia.
Sábado 14 de mayo, de madrugada
Serían las dos de la mañana, mi mujer y mis dos peques dormían como angelitos, por alguna razón yo no podía hacerlo, así que aprovechando que la casa estaba inusualmente tranquila (aquellos que tengáis hijos pequeños, sabréis que estas cosas no pasan a menudo y hay que aprovechar je je), decidí bajar al despacho a programar un rato, a ver si así me entraba sueño. Actualmente, en mi tiempo libre, estoy estudiando python, un lenguaje que me ha encantado y que por cierto, estoy preparando artículos para el blog, aunque por desgracia no saco mucho tiempo libre entre la familia y el trabajo y esa es la causa de que apenas pueda actualizar el sitio. Bueno, como decía, me puse a programar en python un juego de tres en raya. Estaba inmerso en la función que pintaría el tablero en la pantalla (el programa es en modo texto) y eso me llevó a pensar que opciones tendría python para hacer programas con GUI (interfaz gráfica de usuario); como me entró curiosidad, guardé el código que llevaba escrito y me fui a Chrome a investigar sobre el asunto. Después de un rato leyendo, encontré varías bibliotecas que permitían crear GUIS, dos de las cuales me llamaron la atención:
- tkinter
- wxPython
Hay más, pero a mi esas dos son las que más me llamaron la atención. La primera porque ya viene en la instalación de python por defecto, y eso significa que podía empezar a usarla sin más. Además es multiplataforma, lo que quiere decir que si hago una ventana, sin cambiar código funcionará tanto en Windows como en Linux como en MacOs y la tercera es que el propio creador de python apostó por ella y ahora es una muy decente biblioteca (a partir de la versión 8.5). Desde la propia documentación de python podemos ver la información del módulo tkinter. Lo primero que hice, tal y como explica la documentación fue probar la biblioteca. Abrí una ventana de símbolo de sistema y tecleé: python -m tkinter después de darle a Intro me apareció una ventanita muy maja ella, con dos botones y un texto:
Si haces click en el botón que pone "click Me" aparece en el texto del botón unos corchetes, cada vez que hagas click saldrán dos nuevos corchetes. Al darle al botón de EXIT pues se cierra la ventana. Oye, pues no está mal. Vamos a ver que más podemos hacer con tkinter. Investigando un poco más en la documentación pruebo el siguiente código:
import tkinter as gr
class Application(gr.Frame):
def __init__(self, master=None):
gr.Frame.__init__(self, master)
self.pack()
self.crear_controles()
def crear_controles(self):
self.hi_there = gr.Button(self)
self.hi_there["text"] = "Hola¡ Soy un botón\n(Púlsame)"
self.hi_there["command"] = self.decir_hola
self.hi_there.pack(side="top")
self.QUIT = gr.Button(self, text="Salir", fg="red",
command=root.destroy)
self.QUIT.pack(side="bottom")
def decir_hola(self):
print("Hola a todos!")
root = gr.Tk()
app = Application(master=root)
app.mainloop()una vez escrito, lo probamos y nos sale esto:
Bueno, lo que hago aquí es simplemente crear una ventana con dos botones, el botón Salir con letras rojas y el otro al pulsarlo, escribe en la consola Hola a todos. La ventana se puede redimensionar, minimizar, cerrar etc. Después de esto, decido dejarlo ahí. Ya tendré tiempo de aprender más sobre tkinter. La verdad es que tenía ganas de probar la biblioteca wxPython, así que busqué en google poniendo wxPython para ver que me encontraba. El primer enlace que me sale es la página oficial de wxPython así que entro y le echo un vistazo. Según la página, wxPython es un envoltorio (wraper) de la biblioteca wxWidget para C++ con el lenguaje Python. Eso quiere decir, que tiene todas las ventajas de wxWidget que es una biblioteca archiconocida para C++ pero que podemos usarla en Python. Genial.
Busco a ver como me la puedo descargar para usarla y me llevo la primera sorpresa: resulta que la última versión de la biblioteca es de noviembre de 2014, concretamente la número 3.0.2.0, lo cual me hace pensar: "malo, porque mi versión de python es la 3.5 que salió un año más tarde...". En fin, en la página, a la izquierda hay un menú que pone Download y está desglosado en varios sistemas operativos, así que pincho en Ms Windows y...¡¡JUAS!! resulta que solo vale para python 2.6 y 2.7 (¡¡PERO ESTO QUE ES!!). En serio, ¿con la de años que han pasado ya desde que salió python 3.0 (la primera versión de python 3 es del año 2008) no hay versión de wxPython para ella?. No puede ser, así que me puse a buscar en google. Al cabo de un buen rato encuentro información interesante :D. Hay un proyecto llamado Phoenix que se está encargando de portar wxPython para las nuevas versiones, así que buscando encuentro su dirección: wxPython Phoenix. Aun así, no logro encontrar de donde demonios se descarga la biblioteca. Así que sigo buscando, y al cabo de un rato lo encuentro aquí. Hay librerías para python 2.7, 3.4 y 3.5 ¡genial!. Como sacan actualizaciones nuevas con cierta frecuencia, me voy a la más nueva, y me descargo la de mi versión (en mi caso python 3.5 32 bits para windows). El formato del archivo descargado es whl así que hay que instalarlo con pip. Voy a mi terminal, escribo lo siguiente: pip install "wxPython_Phoenix-3.0.3.dev2025+3e3c3a4-cp35-cp35m-win32.whl" pulso intro y en un momento se me instala el paquete. Ahora hay que probarlo. Abro desde la terminal de comandos el interprete, simplemente escribiendo python y cuando me aparece el prompt>>> escribo import wx pulso intro y...
:O ¡Venga hombre!, un error ahora, ¡Anda ya!. ¿Se habrá instalado mal? lo desinstalo: pip uninstall "wxPython_Phoenix-3.0.3.dev2025+3e3c3a4-cp35-cp35m-win32.whl" intro, y ala, ya está desinstalado. Vamos a instalarlo de nuevo: pip install "wxPython_Phoenix-3.0.3.dev2025+3e3c3a4-cp35-cp35m-win32.whl". Otra vez succesfully completed. Abrimos de nuevo la consola interactiva escribimos import wx y... el mismo error. Ya eran las 4 de la mañana, estaba muy cansado y decidí dejarlo ahí de momento, al día siguiente volvería a tratar de arreglar el problema, porque esto se arregla, ¡Vaya si se arregla!.
Bueno, esta historia es un poco larga, y como primer artículo ya está bien. En poco tiempo, espero continuarla y a ver si en la próxima entrada (depende de como me salga de larga) veremos como lo acabo arreglando ^^.



No hay comentarios:
Publicar un comentario
Gracias por tomarte la molestia de comentar esta entrada. Tus sugerencias y críticas serán bien recibidas.