interface) o interfaz gráfica de usuario. • Es el GUI estándar de Python; se incluye con la mayoría de las distribuciones de Python. • Otros: wxPython, PyQt, Kivy, etc.
("Checkbutton") botón ("Button") etiqueta / texto estático ("Label") Cuadro de diálogo ("MessageBox") • Algunos elementos comunes de una GUI (en azul, cómo se denominan en tkinter)
pensar y hacer el boceto de lo que queremos hacer 2. import tkinter 3. Crear una ventana raíz 4. Crear los widgets 5. Ubicar los widgets en la ventana raíz 6. Ejecutar mainloop()
pensar y hacer el boceto de lo que queremos hacer 1.Escribimos un nombre... 2. ...presionamos el botón... 3. Saluda en un pop-up (un cuadro de diálogo, dialog-box o messagebox) Si el checkbox está marcado, le agrega :) al saludo...
v1.0 / 2020-05 dividimos el boceto en filas (rows) y columnas (columns) para posicionar cada widget en una "celda" 1. pensar y hacer el boceto de lo que queremos hacer (marcar filas y columnas)
contener el resto de los widgets top = tkinter.Tk() # le cambiamos el título top.title("Saludador") 12 d.codevilla - CC-BY-SA - v1.0 / 2020-05 3. Crear una ventana raíz
import tkinter # ...y messagebox para el cuadro de mensaje from tkinter import messagebox # ventana principal (raíz / root) # va a contener el resto de los widgets top = tkinter.Tk() # le cambiamos el título top.title("Saludador") # botón btnSaludar = tkinter.Button(top, text="Saludar") 16 d.codevilla - CC-BY-SA - v1.0 / 2020-05
Los programas con GUI se manejan con "eventos" (event-driven) • El orden de ejecución de las acciones depende del orden con que se accionen los diversos widgets • Cada widget puede tener varios eventos asociados (ej. presiono el botón, ingreso texto, muevo el mouse...) • Y se puede asociar un fragmento de código a cada evento (ej. mostrar un texto cuando se presione un botón determinado…)
que vincular código que muestre el pop-up con un evento del botón # botón btnSaludar = tkinter.Button(top, text="Saludar") # botón btnSaludar = tkinter.Button(top, text="Saludar", command=btnSaludaCB) En la línea donde creamos el botón: Agregamos command y el nombre de la función que queremos que se ejecute cuando alguien haga click en el botón:
callback del botón Saludar (btnSaludar) # esta función se ejecuta cuando se presiona el botón saludar def btnSaludaCB(): s = "Hola " + txtNombre.get() s = s + "!!!" messagebox.showinfo("Saludo", s) # botón btnSaludar = tkinter.Button(top, text="Saludar", command=btnSaludaCB) Y debemos escribir el código de esa función (btnSaludaCB) txtNombre es el nombre que del objeto Entry Con .get() obtenemos el texto que contiene (el texto que ingresó el usuario; un nombre en este caso) messagebox.showinfo() muestra un pop-up con el título y texto que le indicamos (título: "Saludo" y texto: lo que contiene el string s)
import tkinter # ...y messagebox para el cuadro de mensaje from tkinter import messagebox # callback del botón Saludar (btnSaludar) # esta función se ejecuta cuando se presiona el botón saludar def btnSaludaCB(): s = "Hola " + txtNombre.get() s = s + "!!!" messagebox.showinfo("Saludo", s) # ventana principal (raíz / root) # va a contener el resto de los widgets top = tkinter.Tk() 22 d.codevilla - CC-BY-SA - v1.0 / 2020-05
valor de un widget a través de una variable asociada • tkinter provee BooleanVar, DoubleVar, IntVar, StringVar • Para conocer el valor usamos .get() y para fijar el valor usamos .set() • y para ejecutar un procedimiento cuando la variable cambia: .bind() • Son necesarias para chekbox y radiobutton d.codevilla - CC-BY-SA - v1.0 / 2020-05
un widget: 1. La definimos 2. Cuando creamos el widget, indicamos el nombre de la variable d.codevilla - CC-BY-SA - v1.0 / 2020-05 # checkbutton chkSonrisa = tkinter.Checkbutton(top, text = "Agregar :)") En la línea donde creamos el checkbox: Definimos una variable IntVar (en este caso) y agregamos variable y el nombre de la variable que queremos asociar al checkbox flgSonrisa = tkinter.IntVar() # variable para saber si está marcado o no chkSonrisa = tkinter.Checkbutton(top, text = "Agregar :)",variable = flgSonrisa)
ejecuta cuando se presiona el botón saludar def btnSaludaCB(): s = "Hola " + txtNombre.get() if flgSonrisa.get() == 1: s = s + " :) " s = s + "!!!" messagebox.showinfo("Saludo", s) Y modificamos el código de la función callback del botón (btnSaludaCB) flgSonrisa es la variable que asociamos al checkbox. Con .get() obtenemos el valor de la variable: Si el checkbox está marcado devuelve 1, si no está marcado devuelve 0
import tkinter # ...y messagebox para el cuadro de mensaje from tkinter import messagebox # callback del botón Saludar (btnSaludar) # esta función se ejecuta cuando se presiona el botón saludar def btnSaludaCB(): s = "Hola " + txtNombre.get() if flgSonrisa.get() == 1: s = s + " :) " s = s + "!!!" messagebox.showinfo("Saludo", s) 29 d.codevilla - CC-BY-SA - v1.0 / 2020-05
va a contener el resto de los widgets top = tkinter.Tk() # le cambiamos el título top.title("Saludador") # botón btnSaludar = tkinter.Button(top, text="Saludar", command=btnSaludaCB) # texto estático (Label) lblAQuien = tkinter.Label(top, text = "¿A quién saludamos?") # entrada de texto (Entry) txtNombre = tkinter.Entry(top) # checkbutton flgSonrisa = tkinter.IntVar() # variable para saber si está marcado o no chkSonrisa = tkinter.Checkbutton(top, text = "Agregar :)",variable = flgSonrisa) 30 d.codevilla - CC-BY-SA - v1.0 / 2020-05