Cuadros de diálogo (messagebox) en Tcl/Tk (tkinter)

Cuadros de diálogo (messagebox) en Tcl/Tk (tkinter)



Un cuadro de diálogo es una ventana con un título, un mensaje, un ícono y uno o más botones. Se emplea para informar al usuario sobre alguna cuestión o bien exhortarlo a tomar una decisión.

Las funciones para generar cuadros de diálogo en una aplicación de Tcl/Tk están definidas en el módulo tkinter.messagebox (tkMessageBox en Python 2), y son las siguientes:

  • showinfo()
  • showwarning()
  • showerror()
  • askquestion()
  • askyesno()
  • askokcancel()
  • askyesnocancel()
  • askretrycancel()

Todas reciben los argumentos message y title, que indican el mensaje y el título del cuadro de diálogo. Por ejemplo:

from tkinter import messagebox

messagebox.showinfo(message="Mensaje", title="Título")

Este código genera la siguiente ventana.

Cuadro de diálogo

Mientras el cuadro de diálogo está abierto, el resto de los controles (widgets) dentro de la ventana no responden a ningún evento (por ejemplo, presionar sobre un botón). Este comportamiento se conoce en la jerga del desarrollo aplicaciones de escritorio como modal.

El ícono desplegado por cada una de las funciones es provisto por el sistema operativo, aunque siempre en relación con el mensaje que pretende comunicar el cuadro. Por ejemplo, el ícono de showinfo() es por lo general azul o celeste e indica información; el de showwarning(), amarillo o naranja denotando advertencia; el de showerror(), rojo indicando error.

Lo mismo ocurre con los textos de los botones. En estas tres funciones, en la mayoría de los sistemas operativos el texto es “Aceptar” o su traducción correspondiente. El valor de retorno es siempre la cadena "ok", independientemente de si se presionó el botón o se cerró la ventana.

Las funciones de interrogación retornan True o False, según se haya presionado “Aceptar” o “Cancelar”, o bien “Sí” o “No”. Ejemplos:

# Retornan True o False.
print(messagebox.askyesno(message="¿Desea continuar?", title="Título"))
print(messagebox.askokcancel(message="¿Desea continuar?", title="Título"))
print(messagebox.askretrycancel(message="¿Desea reintentar?", title="Título"))

Cuadros de diálogo

En estas tres funciones, cerrar la ventana es similar a haber cancelado, por ende el resultado es en ambos casos False.

askquestion() es similar a askyesno(), pero el resultado es "yes" o "no". Estos son los valores retornados directamente de la librería Tk y no hay razón para usarlos en lugar de la primera función.

# Retorna "yes" o "no".
print(messagebox.askquestion(message="¿Desea continuar?", title="Título"))

Por último, askyesnocancel() despliega los botones “Sí”, “No” y “Cancelar”, y los valores de retorno posibles son True, False y None, respectivamente.

button.pack()
# Retorna True, False o None.
print(messagebox.askyesnocancel(message="¿Desea continuar?", title="Título"))

En este caso, cerrar la ventana retorna None, puesto que es el valor asociado con el botón de cancelación.



Deja un comentario