Cuando entramos al mundo de la programación, lo que nos imaginamos es poder hacer programas con interfaces graficas que desborde funcionalidad por todos lados, sin embargo, para llegar a ese punto, primero debemos enfrentar una pantalla oscura y fría llamada consola, prácticamente todos hemos pasado a hacer algún programa que se visualiza dentro de esta consola, tanto que algunos han llegado a tal grado de arte dentro de esta consola, que dio lugar al surgimiento de los gráficos ASCII.
Para un programador es casi una necesidad saltar a algún tipo de interfaz y para consolas existe un término medio con funcionalidades limitadas con algunos botones y checks y se ven como esas interfaces antiguas de las BIOS.
En mi caso que vengo del mundo del desarrollo de videojuegos y que nunca pasé por un instituto, desconozco muchas cosas acerca de lo que hace un programador típico es capaz de realizar.
Ya he hecho varios programas sencillos que corren a través de consola, pero ves algunas librerías como #matplotlib, #pygame y hasta el IDE básico que viene en Python, me refiero a #IDLE, todos estas aplicaciones tienen en común que se ven muy parecidas, después de investigar un poco encuentro que la librería que utilizan como interfaz gráfica se llama #Tkinter, que viene siendo una implementación de tk/tcl, una librería multiplataforma escrita en C, proveniente se sistemas Unix, que es muy fácil de implementar y muy portátil a tal punto que es usado para aplicaciones Web y sistemas embebidos.
Para Python existen varias librerías diferentes, algunas más complejas y modernas, otras más versátiles, entre ellas esta:
Tkinter: que funciona como la librería oficial en Python, escrito en C y C++, funciona a través de un lenguaje interprete llamado TCL, este lenguaje hace que sea fácil interactuar desde otros lenguajes más modernos para generar ventanas.
GObject: basado en GTK (Gimp Toolkit) muy usado en las distribuciones Linux por el escritorio GNOME, incluso en el escritorio liviano XFCE. Nació como una alternativa a tk/tcl
PyQt5: basado en QT que es más moderno y elegante, funciona en prácticamente todos los sistemas, trabaja con los lenguajes más institucionales, lo que es perfecto para empresas.
wxPython también es una librería multiplataforma proveniente de wxWidgets, escrita en C, con una sintaxis similar a Tk/Tcl, dicen ser la librería nativa de Python para crear interfaces.
Kivy: es muy nuevo, aun se siente incompleto y complejo, su interfaz está diseñada para dispositivos móviles Android o IPhone.
En los siguientes posts, haré algunos pequeños tutoriales de Tkinter, tratando de cubrir los temas cruciales, por hoy solo haré un hola mundo en Tkinter explicando el uso de la ventana misma a modo de introducción de este módulo.
¿Instalando TKinter?
No recuerdo muy bien, pero si ustedes tienen instalado Python por primera vez, usando el comando pip list, deberá salir la versión, si tienen la versión 2x de Python y la versión 3x simultáneamente, use el comando pip3 list para Python3. En mi caso en ninguna de los dos comandos aparece, pero pueden ejecutar una consola de Python, importar tkinter y preguntar la versión como muestro en la siguiente imagen.
En mi caso me devuelve la versión 8.6. Si en su caso devuelve algún error, instale tkinter usando el comando.
pip install tkinter # Si tiene una unica version de Python
pip3 install tkinter # Siendo 3 la version de Python en caso de mas tener versiones.
Para ver como se ve una ventana de prueba, abra una consola de Python:
import tkinter as tk
tk._test()
Al hacerlo verá una ventana como esta, en este punto no hay duda alguna que tkinter funciona en su sistema, pero ahora si vamos a embarrarnos las manos un poco.
Hola mundo desde Tkinter.
Creamos un nuevo documento de texto de Python desde su IDE favorito y escriba lo siguiente:
import tkinter as tk
root = tk.Tk() # Esto inicializa el motor de ventanas de Tkinter
root.title('Hola') # Le ponemos un título a la ventana
root.geometry('150x50') # Esta controla el tamaño en pixeles de la ventana
root.resizable(False,False) # Esta función limita redimensionar la ventana
tk.Label(root, text = '!Hola mundo!').pack() # creamos una etiqueta
root.mainloop() # Este es el bucle infinito que dibuja los widgets
Primero importamos la librería tkinter y le dimos un alias como tk, esto es una práctica común, luego creamos una variable llamada root que inicia una instancia de Tk, el nombre de la variable, también es una práctica común.
Usamos root para acceder a un montón de funciones como:
title(str): que nos sirve para ponerle un título a la ventana.
geometry(str): sirve para poner las dimensiones de la ventana, generalmente se usa un string, pero como veremos en los siguientes posts, podemos enviar parámetros un poco más estrictos que una simple cadena de texto.
root.minsize(width: int, height: int)
# esta función le indica a la # ventana cual es el tamaño mínimo que debe tener esta, solo sirve si la función resizable está habilitada.
root.maxsize(width: int, height: int)
# similar a la anterior, pero para indicar cual es el tamaño máximo de la ventana, tanto minsize como maxsize, eliminan el botón maximizar de la ventana.
resizable(): permite modificar el tamaño de la ventana, horizontalmente para el primer parámetro y verticalmente para el segundo parámetro, recibe como parámetros, valores booleanos o números enteros, donde el 0 es falso y 1 es verdadero. Con que alguno de los valores sea falso, esto inhabilita el botón maximizar de la ventana.
atributes(str,int): le da atributos extras a la ventana como:
'-alpha': hace que la ventana tenga un efecto de transparencia
'-topmost': hace que la ventana siempre esté por encima de las demás.
'-fullscreen': maximiza la ventana a tamaño completo.
root.attributes('-fullscreen',1) # Este es un ejemplo
root.lift() # pone por encima la ventana respecto a otras o a alguna en específico.
root.lower() # pone por debajo la ventana respecto a otras o a alguna en específico.
root.iconofi() # minimiza la ventana.
root.destroy() # cierra la ventana y termina el proceso.
root.winfo_screenwidth() # obtiene el valor del ancho de la pantalla en pixeles.
root.winfo_screenheight()# obtiene el valor de la altura de la pantalla en pixeles.
mainloop(): es la función que actualiza la ventana cada vez que sea necesario y es quien escucha los eventos que ocurren dentro de él y por tanto debe ser la última línea, después de esta línea ningún widget o evento será escuchado.
Conclusión.
Hemos aprendido instalar tkinter en caso de no tenerlo y hacer una ventana funcional, con un widget dentro, con solo unas pocas líneas logramos una ventana, pero esto en un futuro se complica más. Afortunadamente tkinter tiene una curva de aprendizaje rápida y no se hace difícil de entender, también cuenta con mucha información libre en la red y una comunidad muy grande.
No siendo mas nos vemos en un próximo post.
Comments