0% encontró este documento útil (0 votos)
29 vistas

Python-Tkinter

facultad de ingenieria unlpam tecnicatura en telecomunicaciones

Cargado por

Maxi Ruiz
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
29 vistas

Python-Tkinter

facultad de ingenieria unlpam tecnicatura en telecomunicaciones

Cargado por

Maxi Ruiz
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 44

Programación

Tecnicatura Universitaria en Telecomunicaciones

Año 2024

AP Santiago Nicolau
1
PROGRAMACIÓN
Tkinter

2
Tkinter
Tkinter es la biblioteca estándar de Python para crear interfaces gráficas de
usuario (GUI).
Es sencilla y versátil, cuenta con una gran documentación, portabilidad a
diferentes plataformas (windows,mac,linux).
Los componentes pueden tener una apariencia un poco anticuada. No se
dispone de herramientas de diseño visual.
Aunque no tiene herramientas integradas para crear diseños completamente
responsivos, al utilizar una combinación de técnicas, es posible lograr
resultados satisfactorios.

3
Tkinter - Páginas de visita obligada
Tk Tutorial
Tkinter 8.5 reference: a GUI for Python

4
Tkinter
Un programa que utiliza Tkinter sigue una estructura general que se puede
dividir en las siguientes partes:
1. Importar el módulo Tkinter.
2. Crear la ventana principal.
3. Crear los componentes (widgets).
4. Organizar los componentes (widgets).
5. Manejar eventos.
6. Iniciar el bucle principal.

5
Tkinter - Conceptos claves
Componente o Widget: elemento visual de la interfaz (botón, etiqueta, etc.).
Gestor de geometría: Determina la posición y tamaño de los widgets.
Evento: Acción del usuario (clic del mouse, presionar alguna tecla, etc.).
Bucle principal: Mantiene la aplicación en ejecución y maneja los eventos.

6
Tkinter - Ejemplo básico
import tkinter as tk
from tkinter import messagebox

def fn_mostrarMensaje():
messagebox.showinfo("Éxito", "Hola Amigos!")

# Crear la ventana principal o app


app = tk.Tk()
app.title("Clásico Hola Mundo")#Titulo de la Ventana Principal
app.geometry("320x150+500+300")#Ubicación en px de la ventana
app.grid_columnconfigure((0), weight=1)#Centrar el contenido

frm = tk.Frame(app,relief=tk.GROOVE,bd=2,padx=10,pady=10)#Creacion de un panel


frm.grid(pady=25)
tk.Label(frm, text="Hola Mundo!").grid(column=0, row=0)#Crear una Etiqueta
tk.Button(frm, text="Aceptar", command=fn_mostrarMensaje).grid(column=0, row=1)#Crear un boton

tk.Label(frm, text="Tkinter Minimo").grid(column=3, row=0)


tk.Button(frm, text="Cerrar", command=app.destroy).grid(column=3, row=1)

app.resizable(0,0)
app.mainloop()#Iniciar Bucle principal y mostrar la ventana
7
Tkinter - Ejemplo básico - Desglose:

Importación de módulos: se importan los módulos tkinter y messagebox para


crear la interfaz gráfica y mostrar mensajes al usuario.
Creación de la ventana principal de la aplicación y asignación del título.
Creación de los componentes del formulario: etiquetas y botones.
mainloop() inicia el bucle principal de la aplicación.

8
Tkinter - Tk()
# Crear la ventana principal
app = tk.Tk()

Contenedor base o raíz de todos los componentes de la interfaz.


Cada programa Tkinter debe tener exactamente una ventana principal o root.
Este objeto debe existir antes de que podamos crear cualquier otro objeto
Tkinter y, cuando se destruye, la aplicación se cierra.

9
Tkinter - mainloop()
app.mainloop()#Iniciar Bucle principal y mostrar la ventana

El bucle de eventos es un bucle infinito que procesa continuamente cualquier


evento que ocurra durante la ejecución del programa.
Los eventos pueden ser: pulsaciones de teclas, clics del mouse u otra
actividad generada por el usuario.
se ejecuta hasta que el programa concluye, por lo que cualquier código
después de esta línea no se ejecutará hasta que se cierre la ventana principal.
Es necesario para poder visualizar y ejecutar la GUI.

10
Tkinter - Jerarquía
Tkinter cuenta con componentes (widgets), para crear interfaces gráficas.
Todos los widgets forman parte de una jerarquía de componentes (o ventana),
teniendo solo una única raíz ( root , o ventana principal).
Cada componente tiene un "padre" o contenedor , excepto la ventana
principal.
Tk() : representa la ventana principal de la aplicación. El ancestro común de
todos los demás widgets.
Todos los demás widgets: Son descendientes directos o indirectos de la
ventana principal.

11
Tkinter - Jerarquía - Importancia
Ayuda a mantener la estructura de la interfaz clara y fácil de gestionar.
Los eventos se propagan a través de la jerarquía. Por ejemplo, al hacer clic en
un botón dentro de un frame, el evento también se propaga al frame y a la
ventana principal.
Los gestores de geometría (como pack , grid y place ) operan en el contexto
de un contenedor.

12
13
Tkinter - Contenedores
Frame: Un contenedor genérico que puede contener otros widgets. se utiliza
para agrupar widgets relacionados.
LabelFrame: Similar a Frame, pero con un título.
PanedWindow: Permite crear paneles divisibles, redimensionables horizontal
o verticalmente.
Notebook: Crea pestañas, permitiendo organizar los widgets en diferentes
páginas.
Toplevel: proporciona un contenedor en otra ventana separada.

14
Tkinter - Contenedores
Para acceder a los componentes dentro de los "Contenedores" invocar el
método winfo_children()

for componente in contenedor.winfo_children():


componente.configure(state='disable')

15
Tkinter - Componentes Básicos
Label: Muestra texto o imágenes estáticas.
Message: Muestra un texto multilínea con ajuste de línea.
Button: Permite al usuario realizar acciones al hacer clic.
Entry: Un campo de texto para que el usuario introduzca datos.
Text: Un área de texto multilineal para mostrar y editar texto.
Canvas: Un lienzo para dibujar formas y gráficos.

16
Tkinter - Componentes de selección
Checkbutton: Permite seleccionar una o varias opciones.
Radiobutton: Permite seleccionar una sola opción de un grupo.
Listbox: Muestra una lista de elementos de los cuales el usuario puede
seleccionar uno o varios.
Combobox: Una combinación de un cuadro de entrada y una lista
desplegable.
Menubutton: Crea un menú desplegable.

17
Tkinter - Widgets de Indicación
Scale: Un control deslizante para seleccionar un valor numérico dentro de un
rango.
Scrollbar: Una barra de desplazamiento para ver contenido que no cabe en la
ventana.
Progressbar: Muestra el progreso de una tarea.
Spinbox: Un cuadro de entrada numérico con botones para incrementar o
decrementar el valor.
separator: Una línea divisoria.
Sizegrip: Un pequeño control en la esquina inferior derecha de una ventana
para redimensionarla.

18
Tkinter - Widgets de Diálogo
Ventanas emergentes que se utilizan para interactuar con el usuario de una
manera más directa y focalizada.
Pueden servir para mostrar mensajes informativos, solicitar datos de
entrada, confirmar acciones o presentar opciones para que el usuario
seleccione.
Las cajas de díalogo se pueden personalizar.

19
Tkinter - Widgets de Diálogo
tkinter.messagebox :
showinfo : Muestra un mensaje informativo.
showwarning : Muestra un mensaje de advertencia.
showerror : Muestra un mensaje de error.
askquestion : Presenta una pregunta con opciones de "Sí" o "No".
askyesno : Similar a askquestion, pero con botones más explícitos.

tkinter.simpledialog :
askstring : Solicita una cadena de texto.
askinteger : Solicita un número entero.
askfloat : Solicita un número de punto flotante.

tkinter.filedialog :
askopenfilename : Abre un diálogo para seleccionar un archivo.
askopenfilenames : Abre un diálogo para seleccionar múltiples archivos.
asksaveasfilename : Abre un diálogo para guardar un archivo. 20
Tkinter vs Tkinter.Ttk
Característica Tkinter Tkinter.Ttk
Aspecto Aspecto básico y tradicional Aspecto moderno y temático
Temas No Con varios estilos predefinidos
Coherente pero básico en todos
Multiplataforma Aspecto nativo en diferentes SO
los SO
Conjunto de Conjunto extendido de widgets con
Conjunto estándar de widgets
widgets mejor diseño
Opciones directas específicas de Personalización basada en estilos (a
Personalización
widgets través de ttk.Style)
Generalmente suficiente para Mejor para aplicaciones más complejas y
Rendimiento
aplicaciones simples visualmente atractivas
Más fácil de usar para Un poco más complejo debido a las
Complejidad
principiantes opciones de estilo
21
Tkinter - Widgets de Ttk
Ttk incluye 18 componentes
12 de ellos ya existían en tkinter : Button, Checkbutton, Entry, Frame, Label,
LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale, Scrollbar, y
Spinbox.
6 son nuevos: Combobox, Notebook, Progressbar, separator, Sizegrip y
Treeview.
Usar los widgets Ttk le da a la aplicación una apariencia mejorada. (ponele).

22
Tkinter - Gestores de Geometría
Permiten controlar la ubicación, el tamaño de los widgets y la relación entre
los diferentes elementos de tu interfaz.
Los gestores trabajan dentro de un contenedor padre.
Los gestores pueden adaptarse a diferentes tamaños de pantalla.
Tres Gestores Principales:
pack()
grid()
place()

23
Tkinter - Gestores de Geometría - pack()
Empaqueta los widgets uno tras otro, de forma horizontal o vertical, según se
especifique.
Ideal para diseños simples donde los componentes se apilan uno encima del
otro o uno al lado del otro.
Opciones comunes:
side : indica si el componente se coloca en la parte superior (top), inferior
(bottom), izquierda (left) o derecha (right).
fill : especifica si el widget debe expandirse para llenar todo el espacio
disponible en una dirección (X, Y o ambas).
padx y pady : agregan espacio alrededor del widget.

24
Tkinter - Gestores de Geometría - grid()
Organiza los widgets en una cuadrícula, similar a una hoja de cálculo. Cada
widget se coloca en una celda específica de la cuadrícula.
Ideal para diseños más complejos que requieren una organización precisa de
los widgets en filas y columnas.
Opciones comunes:
row y column : especifican la fila y columna en la que se colocará el widget.
sticky : tipo de alineación del widget dentro de su celda (N, S, E, W).
columnspan y rowspan : deja que un widget ocupe múltiples celdas.

25
Tkinter - Gestores de Geometría - place()
Posiciona los widgets de forma absoluta, especificando sus coordenadas x e
y.
Ideal para diseños personalizados y cuando se requiere un control preciso
sobre la posición de cada widget.
Opciones comunes:
x e y : Especifican la posición del widget en píxeles.
width y height : Especifican el ancho y alto del widget en píxeles.

26
Tkinter - Mejoras
CustomTkinter
ttkbootstrap

27
28
Tkinter - Variables de control
se asocian a los componentes para almacenar valores.
Al cambiar el valor de una variable de control el widget que la utiliza lo
refleja automáticamente, y viceversa.

var1=StringVar() # Declara variable de tipo cadena


var2=IntVar() # Declara variable de tipo entera
var3=DoubleVar() # Declara variable de tipo flotante
var4=BooleanVar() # Declara variable de tipo booleana

29
Tkinter - Variables de control - Métodos
set() : asigna un valor a una variable de control.
get() : obtiene el valor de la variable de control.
trace() : usada para monitorear a la variable de control
(lectura,cambios,borrado).

varCtrl_1.trace("r",fn_varCtrl_Lectura)
varCtrl_1.trace("w",fn_varCtrl_Escribe)

30
Tkinter - Variables de control - Widgets
Widget Parámetro Tipo Var
Button textvariable StringVar
Checkbutton variable IntVar
Entry textvariable StringVar
Label textvariable StringVar
Menubutton textvariable StringVar
Radiobutton variable IntVar / StringVar
Scale variable IntVar / StringVar / DoubleVar

31
Tkinter - Eventos
Un evento es una acción que ocurre en la interfaz de usuario, como hacer clic
en un botón, mover el mouse o presionar una tecla.
Para capturar un evento de un widget, utilizar método bind() : vincula una
función que será llamada cuando ocurra el evento.

import tkinter as tk

def on_click(event):
print("se hizo clic en el botón")

app = tk.Tk()
button = tk.Button(app, text="Haz clic aquí")
button.bind("<Button-1>", on_click)
button.pack() 32
Tkinter - Eventos de mouse
<Button-1> , <Button-2> , <Button-3> : se generan cuando se presiona el botón
izquierdo, central o derecho del mouse, respectivamente.
<ButtonRelease-1> , <ButtonRelease-2> , <ButtonRelease-3> : se generan cuando
se suelta el botón izquierdo, central o derecho del mouse, respectivamente.
<Motion> : se genera cuando el mouse se mueve sobre un widget.
<Enter> : se genera cuando el mouse entra en el área de un widget.
<Leave> : se genera cuando el mouse sale del área de un widget.
<Double-Button-1>: se genera cuando se hace doble clic con el botón
izquierdo del mouse.

33
Tkinter - Eventos de teclado
<KeyPress> : se genera cuando se presiona una tecla.
<KeyRelease> : se genera cuando se suelta una tecla.

34
Tkinter - Eventos de Componente
<Configure> : se genera cuando cambia el tamaño o la posición de un widget.
<Destroy> : se genera cuando un widget se destruye.
<FocusIn> : se genera cuando un widget recibe el foco.
<FocusOut> : se genera cuando un widget pierde el foco.

35
Tkinter - Personalización de Eventos
Combinar eventos: Por ejemplo, <ButtonPress-1> y <Motion> para
implementar un arrastrar y soltar (drag & drop).
Usar modificadores: Como <Shift-KeyPress-a> para detectar si se presionó la
tecla "a" mientras se mantenía presionada la tecla Shift.
Crear eventos virtuales: Para definir comportamientos personalizados.

36
Tkinter - Validar datos
La validación de datos en una aplicación es crucial para garantizar que los
usuarios ingresen información correcta y consistente.
Ayuda a prevenir errores, mejorar la experiencia del usuario y proteger la
integridad de los datos.
Una aplicación confiable debe verificar y validar todos los datos de entrada
antes de realizar cualquier otra acción o procesamiento.

37
Tkinter - Validar datos - Tipos
Validación en tiempo real: validación a nivel de componente e implica
validar la entrada del usuario tan pronto como la ingresa en la GUI de la
aplicación.
Tener en cuenta que las funciones utilizadas para la validación a nivel de
widget deben ser funciones que devuelvan True o False.
Validación por lotes: esta estrategia también se conoce como validación a
nivel de formulario e implica validar todos los campos de entrada a la vez.

38
Tkinter - Validar datos
validatecommand : argumento del widget Entry permite especificar una
función de validación que será llamada cada vez que se produzca un evento
de validación y debe devolver True o False.
validate : argumento del componente Entry , especifica en qué evento se
debe llamar a esta función.
invalidcommand: parámetro que permite especificar una función que será
llamada cuando se produzca un error de validación. Se puede utilizar esta
función para mostrar un mensaje de error al usuario.

39
Tkinter - Validar datos
Tabla para parámetro validate

Evento Descripción Observación


activa la validación siempre que el widget recibe o pierde el
focus -
foco.
focusin activa la validación siempre que el widget recibe el foco. -
focusout activa la validación siempre que el widget pierde el foco. -
activa la validación siempre que cualquier pulsación de tecla validación en tiempo
key
cambie el contenido del widget. real
validación en tiempo
all activa la validación en todas las situaciones anteriores.
real
none desactiva la validación. -

40
Tkinter - Validar datos
Otros métodos

trace: permite rastrear cambios en una variable y realizar acciones en


consecuencia.
register : crea un identificador único para una función de Python, lo que
permite pasarlo a otros métodos de Tkinter, como validatecommand.

41
Algunas sugerencias
Realizar un bosquejo en papel o con otro método de la GUI antes de codificar.
Planificar la jerarquía de la interfaz antes de empezar a codificar.
Utilizar diferentes contenedores y gestores de geometría.

42
Referencias y documentación
Tutorial de Tkinter
Tkinter 8.5 reference: a GUI for Python - Online
Tkinter 8.5 reference: a GUI for Python - PDF
Tk Commands, version 8.6.15
Python GUI Programming With Tkinter
Documentation TTKBootstrap
GitHub TTKBootstrap

43
FIN

44

También podría gustarte