Tutorial tkinter con Python 3.x

El desarrollo de interfaces gráficas de usuario (GUI) es una tarea común a la hora de desarrollar aplicaciones no solo con Python, también con muchos otros lenguajes de programación, tkinter es un módulo Python que nos facilita el desarrollo de las GUI, está disponible en la instalación por defecto, soporta diversas plataformas como: Windows, Linux, Mac, y además es muy fácil de usar. 

Como siempre al empezar con una tecnología de programación veremos el clásico programa “Hola Mundo”, primero veremos el código y seguido explicaremos detalladamente su funcionamiento.

from tkinter import Label

widget = Label(None, text='Hola Mundo :: GUIs con tkinter')
widget.pack() 
widget.mainloop()

Al ejecutar estas pocas líneas de código ya tenemos una ventana completamente funcional, esta ventana puede ser movida, minimizada, cerrada, o podemos cambiar su tamaño al arrastrar el borde con el ratón, la ventana se ve como la siguiente imagen:

crear gui con tkinter en python 3.x

En la segunda línea vemos el código: widget = Label(None, text="…") aquí es donde creamos el widget de tipo Label que nos permite mostrar un texto en la ventana, en su constructor primero indicamos la ventana principal a la que estará asociado el widget, en este caso usamos None, con esto el widget estará asociado a la ventana por defecto que es creada automáticamente por tkinter, luego usando text="…" establecemos cual es el texto que deseamos mostrar.

El siguiente código que vemos es widget.pack(), la llamada a este método es necesaria para ubicar los widgets en la ventana, sin el nuestro mensaje no seria visible, el método pack() ubica los widgets en una posición que podemos cambiar a través de los correspondientes atributos, más adelante veremos como hacerlo, los widgets también pueden ser posicionados con otros métodos como grid().

Nos queda por estudiar widget.mainloop() es la parte mas importante de una GUI, sin el nuestra aplicación seria obsoleta, mainloop() es el encargado de iniciar el bucle de mensajes, aquí se monitorea la interacción del usuario a través del ratón o teclado con la aplicación, cuando se produzca un evento recibiremos la notificación correspondiente y podremos respondes a dicho evento, por ejemplo: el usuario hace clic sobre el botón cerrar, respondemos cerrando la aplicación.

Crear y administrar una ventana tkinter

Usaremos Tk() para obtener una ventana principal en la añadiremos dos widgets, un Label y un Button, este último utilizado para generar una acción cuando el usuario pulse sobre él, creamos los dos widgets y configuramos su propiedad text="…", y los posicionamos con el método pack(), podemos ver como modificar las propiedades de la ventana, por ejemplo, su titulo, de este modo: root.title("…").

from tkinter import *

root = Tk()

lbl = Label(root, text='Este es un [Label] tkinter')
lbl.pack()

btn = Button(root, text='Presiona este [Button para Salir]', command=root.quit)
btn.pack()

root.title('tutorial tkinter')
root.mainloop()

Le prestamos atención a la línea de código resaltada, es donde creamos el botón, usamos text="…" para establecer el texto, command=root.quit para indicar que acción debemos ejecutar cuando el usuario presione el botón, en este caso root.quit termina la ejecución de la aplicación.

tkinter configurar widgets

La acción a ejecutar puede ser cualquier función o método que cumpla con las especificaciones, para un widget Button.

Configurar widgets tkinter

Hemos estado configurando los widgets tkinter en el constructor, indicando el nombre del argumento seguido de el valor que deseamos establecer, pero debemos saber que existen otras formas de configurar los elementos de la GUI, entre ellas tenemos:

fred = Button(self, fg="red", bg="blue")

Esta es la metodología que hemos estado utilizando hasta ahora, donde fg y bg son los nombres de los argumentos que deseamos modificar, el primero cambia el color del texto y el segundo el color de fondo, el color deseado lo indicamos a través de su nombre. 

fred["fg"] = "red"

fred["bg"] = "blue"

La segunda forma es acceder a la propiedad que deseamos cambiar usando su nombre para acceder a ella, esto lo hacemos después de haber creado el objeto.

fred.config(fg="red", bg="blue")

Otra forma es usar el método config(), lo usamos del mismo modo que lo hicimos con el constructor.

Organizar tkinter con clases

Python es un lenguaje orientado de objetos, por ello para tomar ventajas de la POO vamos a encapsular todo lo que hemos aprendido en una clase, simplemente tomamos lo que ya tenemos y lo reorganizamos.

import tkinter as tk

class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = "Hello World\n(click me)"
        self.hi_there["command"] = self.say_hi
        self.hi_there.pack(side="top")

        self.quit = tk.Button(self, text="QUIT", fg="red", command=root.destroy)
        self.quit.pack(side="bottom")

    def say_hi(self):
        print("hi there, everyone!")

root = tk.Tk()
app = Application(master=root)
app.mainloop()

Este es el código que encontramos en la documentación oficial de Python, lo único que no hemos visto es el método pack(side="…"), de esta manera le indicamos al método pack donde queremos que posicione el widget, tenemos las siguientes opciones: 'left', 'right', 'top', 'bottom'.

Utilizar la extensión .pyw

Normalmente los script Python son almacenados con la extensión .py, para ejecutar este script, en Windows por ejemplo necesitamos abrir una consola de comandos y ejecutar lo siguiente: python hola_mundo.py, si deseamos ejecutar una aplicación con GUI por lo general no se requiere enviar argumentos desde la consola, por lo que, si cambiamos la extensión a .pyw la aplicación se ejecutara automáticamente al hacer doble clic sobre ella. 

Ver Todos los Tutoriales Tkinter

Comentarios

Temas relacionados

Entradas populares de este blog

tkinter Grid

Controles y Contenedores JavaFX 8 - I

Conectar SQL Server con Java

tkinter Canvas