¿Qué es Tinker?
Tkinter es una biblioteca estándar de Python que permite crear interfaces gráficas de usuario (GUI, por sus siglas en inglés). Proporciona un conjunto de herramientas y widgets para diseñar y construir aplicaciones con ventanas, botones, etiquetas, cuadros de texto, entre otros elementos interactivos.
Figura 1. Calculadora para convertir PSI/GPM a HP
Algunos conceptos clave en Tkinter son:
- Ventana principal: Es la ventana principal de la aplicación que contiene todos los elementos y widgets.
- Frames: Son contenedores rectangulares que se utilizan para agrupar y organizar otros widgets. Ayudan a estructurar la interfaz y aplicar diseños.
- Widgets: Son los componentes interactivos de la interfaz, como botones, etiquetas, campos de entrada de texto, cuadros de lista, etc. Se colocan en las ventanas o frames para interactuar con el usuario.
- Layouts: Tkinter proporciona varios gestores de diseño, como
pack
,grid
yplace
, para organizar y posicionar los widgets dentro de una ventana o frame. - Eventos: Tkinter permite responder a eventos como clics de botón, movimiento del ratón, pulsaciones de teclas, entre otros. Se pueden asociar funciones (llamadas "callbacks") a los eventos para realizar acciones específicas.
- Variables: Tkinter incluye variables especiales como
StringVar
,IntVar
,DoubleVar
, etc., que se pueden asociar a los widgets para realizar un seguimiento y actualizar automáticamente los valores de los widgets.
Tkinter es ampliamente utilizado para desarrollar aplicaciones de escritorio simples en Python debido a su facilidad de uso y a que forma parte de la biblioteca estándar de Python, lo que significa que no se requiere ninguna instalación adicional.
Calculadora para convertir PSI a HP
import tkinter as tk
def calculate_hp():
psi = float(entry_psi.get()) # Obtiene el valor ingresado en la entrada de PSI y lo convierte a un número decimal
gpm = float(entry_gpm.get()) # Obtiene el valor ingresado en la entrada de GPM y lo convierte a un número decimal
hp = psi * gpm / 1714 # Calcula la potencia en caballos de fuerza (hp) utilizando la fórmula
result_label.config(text="Potencia en HP: {:.2f}".format(hp)) # Actualiza el texto de la etiqueta de resultado con la potencia calculada
root = tk.Tk() # Crea la ventana principal de la aplicación
root.title("Calculadora de Potencia") # Establece el título de la ventana
root.geometry("200x150") # Establece el tamaño de la ventana
# Frame principal
main_frame = tk.Frame(root, padx=10, pady=10) # Crea un frame para contener los elementos del formulario con márgenes internos
main_frame.pack() # Empaqueta el frame en la ventana principal
# Etiqueta y entrada para PSI
psi_label = tk.Label(main_frame, text="PSI:") # Crea una etiqueta con el texto "PSI"
psi_label.grid(row=0, column=0, sticky="w") # Ubica la etiqueta en la fila 0 y columna 0 del grid, alineada a la izquierda
entry_psi = tk.Entry(main_frame, width=10) # Crea una entrada de texto para ingresar el valor de PSI con un ancho de 10 caracteres
entry_psi.grid(row=0, column=1) # Ubica la entrada de PSI en la fila 0 y columna 1 del grid
# Etiqueta y entrada para GPM
gpm_label = tk.Label(main_frame, text="GPM:") # Crea una etiqueta con el texto "GPM"
gpm_label.grid(row=1, column=0, sticky="w") # Ubica la etiqueta en la fila 1 y columna 0 del grid, alineada a la izquierda
entry_gpm = tk.Entry(main_frame, width=10) # Crea una entrada de texto para ingresar el valor de GPM con un ancho de 10 caracteres
entry_gpm.grid(row=1, column=1) # Ubica la entrada de GPM en la fila 1 y columna 1 del grid
# Botón de cálculo
calculate_button = tk.Button(main_frame, text="Calcular", command=calculate_hp, width=10, height=2) # Crea un botón con el texto "Calcular", que ejecuta la función calculate_hp al ser presionado, con un ancho de 10 y altura de 2
calculate_button.grid(row=2, columnspan=2) # Ubica el botón en la fila 2 y se extiende a lo ancho de las dos columnas
# Etiqueta de resultado
result_label = tk.Label(main_frame, text="Potencia en HP:", pady=10) # Crea una etiqueta con el texto "Potencia en HP" y un espacio vertical de 10 píxeles
result_label.grid(row=3, columnspan=2) # Ubica la etiqueta en la fila 3