Curso Python. Volumen XIV: Interfaces Gráficas. Parte I
Bienvenidos un día más al curso de Python, hoy os vamos hablar sobre las interfaces gráficas, con ellas lo que haremos es convertir nuestras aplicaciones de consola a aplicaciones de ventana de modo que sean más fáciles de usar. Así que pongámonos manos a la obra.
Las interfaces gráficas son las partes gráficas de un programa que nos ayudan a interactuar con un usuario, es decir, el conjunto de ventanas con las que presentamos la información y los formularios para que al usuario le sea más sencillo interactuar con nuestra aplicación.
Tkinter y el modelo dirigido por eventos
“Tkinter” es la biblioteca estándar de Python para construir interfaces gráficas (GUI). En esencia es un puente entre Python y la biblioteca “Tk” que es la que en última instancia se comunica con el sistema de ventanas del sistema operativo. La biblioteca “Tk” es usada por otros lenguajes como “Perl”, “Ruby” y “TCL” por lo que tiene un amplio soporte.
La estructura que se crea cuando se usa “tkinter” es la que se denomina “event driven” (dirigida por eventos). Esta estructura consiste en crear la “GUI” y esperar a que ocurra un evento. Durante la espera, la librería “Tk” se encuentra en un bucle vigilante a cualquier evento como una pulsación de ratón o de una tecla, una vez se produce se llama inmediatamente a una parte de código para su ejecución.
import tkinter
# crea un objeto de la clase Tk
v = tkinter.Tk()
# título de la ventana
v.title('Ventana Tkinter')
# posición y tamaño
v.geometry('400x100+600+100')
# introducimos un widget
tkinter.Label(v, text='Hola Mundo!!!').pack()
# inicia el bucle de eventos
v.mainloop()
Los elementos de interfaz añadidos a una “GUI” se llaman widgets (controles, botones…). Cada tipo de ellos viene definido por una clase en “tkinter”. Los parámetros que se pasan al constructor son el objeto widget padre en el que quedará contenido (un valor None o ningún valor hace que se asigne el widget a la ventana que está en el nivel más alto). Otras opciones de configuración que se pueden dar son un texto, el tamaño del widget y, seguramente la más importante, los “callback handlers” que son las funciones que se llaman cuando se produce un evento.
Widgets
Cada widget que coloquemos en la interfaz gráfica es una instancia de una clase de “tkinter” que lo define. Las más comunes son las siguientes:
Tk
Clase contenedor raíz de la interfaz. Cada instancia de esta clase tiene un intérprete “Tcl” asociado. También es la ventana padre por defecto cuando no se especifica ninguna otra o se usa el valor “None”.
Toplevel
Crea ventanas independientes de la ventana raíz. Aunque no son procesos independientes.
Label
Muestra un mensaje (una cadena de texto) en un widget.
Button
Crea un botón, al evento de pulsación se le puede asociar una función.
Frame
Crea un marco. Se usa como contenedor para otros widgets.
Empaquetador
La forma de añadir estos widgets a una ventana u otro widget contenedor es con el método pack (hay otros métodos como “grid” o “placer”). Este método empaquetador acepta varios parámetros como “side”, “anchor”, “expand” y “fill”.
import tkinter as tk
ventana = tk.Tk()
boton = tk.Button(ventana, text='PRESS')
boton.pack(side='right', expand='yes', fill='both')
ventana.mainloop()
La propiedad “side” cuyos valores pueden ser “right”, “left”, “top” o “bottom” (estos valores representan los lados de la ventana) nos ayuda a posicionar el widget dentro del contenedor dejando el lado opuesto para el siguiente widget.
La propiedad “expand” cuyos valores pueden ser “yes” o “no” lo que hace es expandir el widget de manera que ocupe el mayor espacio disponible, esto lo realiza después de colocar todos los widgets. El tamaño inicial del widget es el mínimo para mostrar lo que contiene.
La propiedad “anchor” cuyos valores pueden ser “nw”, “n”, “ne”,”e”,”se”,”s”,”sw”,”w” y “center” (estos valores representan los puntos cardinales). Nos ayuda a posicionar al widget dentro del hueco que se le ha proporcionado.
La propiedad “fill” cuyos valores pueden ser “x”, “y” o “both” (estos valores representan los ejes de coordenadas). Hace que el widget se estire rellenando el espacio reservado para él sobre el eje que le hemos indicado.
Esto es todo por hoy, con lo explicado podéis empezar a crear vuestras propias ventanas y empezar a posicionar los elementos en ellas, en la próxima entrega os enseñaremos cómo añadir eventos para poder interactuar con la ventana. Y para todos los que se acaban de incorporar indicarles que tenemos un índice con todos los capítulos del curso, ya que nunca es tarde para empezar.
Via: www.redeszone.net
