Publicado el Deja un comentario

TKINTER

Desarrollo de interfaces gráficas con Python

Tomás Domínguez Mínguez

Introducción

Las interfaces de usuario son el medio de interacción entre las aplicaciones y las personas. Dependiendo del modo en el que se lleve a cabo esta comunicación, se distinguen diferentes tipos: desde las interfaces de línea de comandos (en las que el intercambio de información se realiza utilizando únicamente texto), pasando por las interfaces gráficas, hasta las sofisticadas interfaces de voz (en las que el usuario ni siquiera necesita usar las manos).

Si conoce Python, sabrá que la forma más fácil de intercambiar datos con un programa escrito en este lenguaje es mediante la shell de su entorno de desarrollo o la línea de comandos proporcionada por una ventana de símbolo del sistema en Windows, la aplicación Terminal en MacOS o una consola de Linux (también llamada terminal o shell). Se trata, por lo tanto, de una interfaz textual.

Por sus características, las interfaces textuales son muy limitadas, por lo que su utilización resulta difícil y engorrosa, aparte de poco atractiva, lo que puede provocar el rechazo de la aplicación. Por ese motivo, en Python existen diversos paquetes de desarrollo de interfaces de usuario, cada uno de los cuales tiene sus fortalezas y debilidades, aunque solo Tkinter puede presumir de ser el único estándar.

Escrita por Fredrik Lundh, su nombre procede de la librería gráfica Tk en la que está basada. En realidad, se trata de una API (Application Programming Interface – Interfaz de programación de aplicaciones) creada específicamente para usar Tk desde Python. Se incluye automáticamente al instalar el propio entorno del lenguaje, por lo que no tendrá que importar nada adicional para empezar a utilizarla. Eso sí, antes deberá conocer sus principios básicos de funcionamiento, descritos de manera clara y sencilla en Tkinter. Desarrollo de aplicaciones gráficas con Python.

Los widgets

Tkinter ofrece una gran variedad de componentes gráficos, a los que se conoce como widgets, que constituyen las piezas básicas de construcción de las interfaces de usuario. Todos los widgets disponen de multitud de opciones de configuración, con las que se determina su aspecto (el tamaño, el color, etc.) o su comportamiento ante la aparición de toda clase de eventos (se pulsa un botón, se escribe en un campo de entrada de texto, etc.).

En esta obra se analiza la mayoría de los controles gráficos ofrecidos por Tkinter, desde los más elementales, como etiquetas, botones o campos de entrada de texto,

pasando por otros más elaborados, como menús desplegables, checkbuttons o radiobuttons,

hasta útiles cuadros de diálogo, como el mostrado más abajo, que posibilitan la elección de colores

En Tkinter. Desarrollo de aplicaciones gráficas con Python aprenderá a usar los widgets más relevantes de esta librería y estudiará los principales parámetros de configuración ofrecidos por todos ellos.

Los contenedores

Una interfaz de usuario requiere un diseño visual previo que establezca la distribución de los widgets en la pantalla. Para ello, la ventana principal (o cualquier otra auxiliar) se divide en zonas independientes donde los controles gráficos adoptan una disposición específica, diferente del resto. En Tkinter, esto se traduce en la creación de contenedores que agrupan los widgets de cada una de esas zonas.

Naturalmente, un contenedor puede estar formado a su vez por otros contenedores, permitiendo la creación de interfaces tan complejas como sea necesario. Por ese motivo, una interfaz puede ser vista como una estructura jerárquica, en cuya parte superior está la ventana principal y, por debajo, ordenados en niveles, los diversos contenedores donde se incluyen los widgets.

La ventaja de este enfoque es poder asumir el desarrollo de cualquier interfaz de una forma ordenada (esencial en interfaces complejas), ya que esta se divide en partes más pequeñas y, en consecuencia, más fáciles de implementar.

A modo de ejemplo, analicemos la disposición de los elementos que componen el siguiente editor de texto (forma parte de una de las prácticas):

La estructura jerárquica de esta interfaz se muestra a continuación, donde se aprecia claramente que la ventana principal se divide en tres contenedores (en este caso, son frames), en uno de los cuales hay un área de entrada de texto y, en los otros dos, un conjunto de botones distribuidos horizontal o verticalmente con criterios diferentes:

Esta otra imagen demuestra que la disposición de los botones de cada contenedor permanece inalterable, aunque se modifique el tamaño de la ventana.

Al igual que los widgets, los contenedores también se consideran componentes gráficos, por lo que son igualmente configurables (su tamaño o posición en pantalla, el color de fondo o el de primer plano, etc.). En Tkinter. Desarrollo de aplicaciones gráficas con Python descubrirá los tipos de contenedores existentes, las principales características de todos ellos y la forma de utilizarlos para que sus aplicaciones adquieran un aspecto profesional.

Los eventos

Cuando un usuario actúa sobre un widget (por ejemplo, pulsa un botón o selecciona la opción de un menú) se genera un evento. Dichos eventos son capturados por el propio componente gráfico, lo que provoca la ejecución de las funciones encargadas de responder de la forma deseada en cada caso. A estas funciones se las conoce como controladores de eventos y son las que realmente definen el comportamiento de la aplicación, ya que permiten la interacción con el usuario.

Todas las interfaces de usuario atienden eventos, por lo que su manejo será una constante a lo largo de todos los ejercicios propuestos en esta obra. Sin embargo, una de estas prácticas resulta especialmente singular, ya que consiste en la realización de un editor gráfico con el que podrá dibujar diferentes tipos de figuras geométricas y, posteriormente, moverlas, cambiarlas de color, ponerlas en primer plano o borrarlas con menús contextuales, tal como se observa en esta otra imagen.

En Tkinter. Desarrollo de aplicaciones gráficas con Python será capaz de manejar todo tipo de eventos, incluso secuencias de eventos (por ejemplo, la pulsación simultanea la tecla Ctrl y otra cualquiera, o la del ratón y la barra espaciadora, etc.), aprenderá a vincularlos a los widgets y, sobre todo, será capaz de crear los controladores que den vida a sus interfaces de usuario.

Los módulos ttk y tkcalendar

Debido a su importancia, en Tkinter. Desarrollo de aplicaciones gráficas con Python se dedica un capítulo al módulo ttk. Entre otras ventajas, este paquete le ayudará a desarrollar código genérico que se adapte a la apariencia específica del sistema operativo en el que se ejecute (Windows, MacOS, etc.), asemejando su aspecto al del resto de aplicaciones que se ejecutan en dicho sistema operativo.

El módulo tkcalandar también cuenta con su propio capítulo. Aunque no forma parte de Tkinter, se ha decidido incluirlo porque los selectores de fecha son controles gráficos de uso común en muchas interfaces de usuario.

La apariencia de los calendarios será totalmente configurable y permitirá la gestión de todo tipo de eventos o tareas, tal como se advierte en la siguiente imagen, donde se comprueba que el 24 de julio tengo una revisión con el dentista a las 12:30 y luego una comida con los amigos a las 15:00.

Puede llegar a pensar que el uso de Tkinter requiere un elevado conocimiento de Python, pero nada más lejos de la realidad. La prueba es que Tkinter. Desarrollo de aplicaciones gráficas con Python puede ser leído por cualquiera que posea un nivel básico en Python. Y para los que piensan que lo tienen oxidado o crean que su nivel es insuficiente, se ofrece un amplio anexo donde se describen los fundamentos del lenguaje. Allí se dan los conocimientos necesarios para seguir todas las prácticas propuestas.

Para afianzar estos conocimientos, en ese mismo anexo desarrollará una completa aplicación de gestión de clientes de una clínica veterinaria, en la que será capaz de dar de alta, de baja o modificar los datos de dichos clientes y sus mascotas. Por supuesto, en cualquier momento podrá consultar la información asociada a cualquiera de ellos, que estará guardada de forma persistente en disco.

En el siguiente anexo (otro más) la interfaz textual de la aplicación anterior se sustituirá por otra completamente gráfica. Su aspecto se aprecia en la siguiente secuencia de pantallas que muestra el proceso de alta de un cliente.

Los nuevos conceptos que se introducen en cada sección se combinan con ejemplos detallados en los que el código se explica línea a línea para garantizar su correcta comprensión. De esta forma, y, sin darse cuenta, con Tkinter. Desarrollo de aplicaciones gráficas con Python adquirirá los conocimientos necesarios para dotar a sus aplicaciones del diseño gráfico que se merecen.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *