Cuadros de diálogo en AppleScript para comunicarnos con los usuarios

La comunicación con los usuarios es indispensable para que un programa o script pueda desempeñar su función en la mayoría de casos.

Ya hemos visto en artículos anteriores el uso del comando say que permite verbalizar un texto a través de la síntesis de voz de MacOS pero este método de comunicación con el usuario no es el más accesible para todos ya que puede que el usuario sea sordo o que en el momento de verbalizar el mensaje se esté reproduciendo música, otro sonido u otro mensaje. Por esta razón es recomendable utilizar un método que pueda mostrar en pantalla y de forma accesible los textos que necesitemos comunicar al usuario desde nuestros scripts.

Cuadros de diálogo accesibles para AppleScript

AppleScript nos proporciona el comando display dialog que nos permite mostrar un texto en un cuadro de diálogo. Este cuadro de diálogo es totalmente compatible con todos los productos de apoyo de MacOS.

Veamos un ejemplo simple. Mostraremos el texto Hola mundo! por pantalla:


display dialog "Hola mundo!"

Usando una notificación del sistema en lugar de un cuadro de diálogo

El comando display nos permite mostrar diálogos, alertas y notificaciones del sistema. Por ejemplo, si en lugar de mostrar un cuadro de diálogo quisieramos mostrar una notificación del sistema utilizaríamos display notification. El ejemplo anterior quedaría así:


display notification "Hola mundo!"

Personalización de los botones por defecto en el cuadro de diálogo

Por defecto el comando display dialog incluye un botón de cancelar y un botón de aceptar pero gracias a que display dialog posee multitud de parámetros podemos personalizar su visualización para que se adapte a lo que necesitemos en cada momento.

Por ejemplo, en nuestro caso anterior sólo necesitaríamos mostrar un botón de aceptar para que el usuario cerrase el cuadro de diálogo. El código sería el siguiente:


display dialog "Hola mundo!" buttons {"Aceptar"}

Hemos usado el parámetro buttons para indicar un listado de botones que se mostrarán en el cuadro de diálogo. Para ello creamos una variable de tipo lista de AppleScript.

En otras situaciones quizás necesitemos ofrecer al usuario varias opciones posibles. Por ejemplo, vamos a cambiar el texto de los botones cancelar y aceptar por las posibles respuestas a una pregunta.


display dialog "¿Quiere borrar la información de su disco duro?" buttons {"Si, no hay nada de interés", "No, quiero demasiado a mis datos"} default button "Si, no hay nada de interés" cancel button "No, quiero demasiado a mis datos"

Con el parámetro default button indicamos cuál será el botón seleccionado por defecto y que se pulsará automáticamente si pulsamos la tecla enter en el cuadro de diálogo.

Con el parámetro cancel button indicamos cual será el botón de cancelar.

Los valores para default button y cancel button deberá ser el texto exacto de uno de los botones incluidos en la lista que hemos utilizado para el parámetro buttons. Si indicamos un valor inapropiado el editor de AppleScript nos indicará un error.

El problema de usar display dialog es que sólo podemos mostrar un máximo de 3 botones mediante el uso de estos parámetros. Si intentasemos ejecutar el siguiente script nos saldría un error indicando el mensaje de error de Maximo 3 botones permitidos.


display dialog "¿Quiere borrar la información de su disco duro?" buttons {"Si, no hay nada de interés", "No, quiero demasiado a mis datos", "No estoy seguro, preguntame mañana", "Aún me lo estoy pensando"} default button "Si, no hay nada de interés" cancel button "No, quiero demasiado a mis datos"

Más adelante veremos otro método para que el usuario pueda elegir entre más de tres opciones.

Utilizando un lenguaje más visual y accesible

Para el ejemplo anterior en el que consultamos si el usuario desea borrar el disco duro es muy aconsejable que este tipo de preguntas vengan acompañadas de un icono indicando si es un error, un aviso de seguridad, una pregunta, etc. Podemos añadir iconos a nuestro cuadro de diálogo incluyendo with icon al final de nuestro comando para mostrar la pregunta. El código de nuestro ejemplo quedaría así:


display dialog "¿Quiere borrar la información de su disco duro?" buttons {"Si, no hay nada de interés", "No, quiero demasiado a mis datos"} default button "Si, no hay nada de interés" cancel button "No, quiero demasiado a mis datos" with icon caution

Los valores por defecto para el parámetro icon son stop, note y caution. También podemos utilizar un icono personalizado por nosotros pero no veremos esta posibilidad en este artículo.

Tiempo límite para nuestros mensajes y diálogos

Por alguna razón podríamos estar interesados en que nuestro diálogo sólo se muestre un número determinado de segundos. Con el parámetro giving up after podemos indicar el número de segundos que el usuario tendrá para poder visualizar e interactuar con el cuadro de diálogo.

Un ejemplo podría ser el siguiente:


display dialog "¡Rápido, conteste en menos de 5 segundos! ¿Quiere borrar la información de su disco duro?" buttons {"Si, no hay nada de interés", "No, quiero demasiado a mis datos"} default button "Si, no hay nada de interés" cancel button "No, quiero demasiado a mis datos" with icon caution giving up after 5

Añadiendo un título a nuestro cuadro de diálogo

Un título para nuestro cuadro de diálogo puede ser necesario para que el usuario se ponga en contexto con lo que le estamos preguntando.

Para indicar un título en nuestro cuadro de diálogo podemos utilizar el parámetro with title. Nuestro ejemplo quedaría así:


display dialog "¡Rápido, conteste en menos de 5 segundos! ¿Quiere borrar la información de su disco duro?" buttons {"Si, no hay nada de interés", "No, quiero demasiado a mis datos"} default button "Si, no hay nada de interés" cancel button "No, quiero demasiado a mis datos" with icon caution with title "Pregunta para borrado del disco" giving up after 5

Con lo visto en este artículo ya podemos comunicarnos con nuestros futuros usuarios de forma más accesible.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.