Zenity, es un programa que le permitirá desplegar cuadros de dialogos GTK+, lo cual le facilitará la interacción con el usuario. Tomando en consideración lo anterior, Zenity debe ser considerado a la hora de desarrollar scripts que necesitan presentar una interfaz “amigable”, lo cual facilitará el manejo del script. Por ejemplo, puede generar un cuadro de dialogo que le indique al usuario el progreso de la operación actual, o un mensaje de alerta al usuario.
¿Qué puedo hacer con Zenity?
Puede hacer los siguientes cuadros de dialogos:
- Calendarios
- Selección de ficheros o directorios
- Listas
- Mensajes de:
- Error
- Información
- Preguntas
- Alerta
- Progreso de operaciones
- Entradas de texto
- Textos de información
- Mensajes en el área de notificación
Esto no pretende ser un tutorial exhaustivo del uso de Zenity, simplemente se mostrarán algunos usos que le he dado al desarrollar audioconverter, si utiliza el entorno de escritorio GNOME, puede encontrar información detallada en: Sistema -> Ayuda -> Escritorio -> Zenity.
Listas
En la imagen de la
izquierda podemos apreciar uno de los tipos de listas que pueden ser creadas, en
este caso he usado la opción –radiolist, esto permite que únicamente se
seleccione una opción, si se desea permitir el seleccionar más de una opción,
podemos recurrir a –checklist. Al emplear las opciones –radiolist o
–checklist es necesario comenzar cada fila con alguna de las constantes
TRUE
o FALSE
, en donde TRUE
hará que el botón de radio (o de verificación)
se encuentre marcado, en caso contrario el botón quedará desmarcado.
Es importante aclarar que Zenity retornará la entrada que se encuentre en la
primera columna de texto de la fila seleccionada al error estándar (stderr
),
en el ejemplo el valor de retorno sería 2. En el caso que necesite utilizar
dicho valor en el script, será necesario hacer una redirección de los
descriptores.
zenity --list \
--title="AudioConverter (v0.3)" \
--text="Seleccione una operacion a realizar de la lista." \
--radiolist \
--width="355" \
--height="290" \
--column="" --column="#" --column="Operacion" --column="Descripcion" \
FALSE 1 "MP3 a WAV" "Convierte ficheros MP3 a WAV" \
FALSE 2 "MP3 a OGG" "Convierte ficheros MP3 a OGG" \
FALSE 3 "OGG a WAV" "Convierte ficheros OGG a WAV" \
FALSE 4 "OGG a MP3" "Convierte ficheros OGG a MP3" \
FALSE 5 "WAV a OGG" "Convierte ficheros WAV a OGG" \
FALSE 6 "WAV a MP3" "Convierte ficheros WAV a MP3" \
FALSE 7 "WMA a MP3" "Convierte ficheros WMA a MP3"
En el codigo de arriba se muestran algunas cosas que aún no he detallado, por ejemplo:
--title
es una opción general, establece el título del cuadro de dialogo.--width
es una opción general, establece la anchura del cuadro de dialogo.--height
es una opción general, establece la altura del cuadro de dialogo.--text
establece el texto de la lista.--column
es una opción específica para la generación de listas, establece el título de la columna.
Existe una opción bastante interesante dentro de las opciones de las listas,
dicha opción es –print-column, la cual permite especificar qué columna se
imprimirá en la salida estándar (stdout
). Por defecto se devuelve el valor de
la primera columna, puede utilizar la cadena ALL
para imprimir todas las
columnas de la fila seleccionada.
Es importante que se asegure de encerrar entre comillas cada uno de los argumentos de los comandos en Zenity, de lo contrario, puede obtener resultados inesperados.
Textos de información
Para crear dialogos de textos de información simplemente debemos utilizar la
opción --text-info
.
Aparte de las opciones generales, los dialogos de textos de información soportan las siguientes opciones:
--filename=fichero
especifica qué fichero será cargado en el dialogo de información-
--editable
permite que el texto mostrado pueda ser editado. El texto editado es retornado astandard error
(stderr
), cuando el cuadro de dialogo se cierra:… 2) mp32ogg 2>&1 | zenity –text-info
–title=”Registro de la Conversion”
–width=”420”
–height=”500”;; …
En el código no se indica explicitamente la opción –filename, pero cabe
resaltar que la salida estándar (stdout
) de la función mp32ogg es trasladada a
través de una tubería (pipe, |) a Zenity, previamente se ha duplicado el
error estándar (stderr
) de la fucnión mp32ogg
a la salida estándar
(stdout
) de la misma, de esta manera aprovechamos como entrada al dialogo de
información las salidas de la función mp32ogg
.
Si lo desea puede ampliar la información acerca de las redirecciones en bash leyendo el Manual de Referencia Bash (inglés), no estoy seguro si existe en la red una versión en español de este manual.
Dialogos de Información
Para mostrar cuadros de dialogos de información debemos hacer uso de la opción –info. Dentro de esta categoría existe únicamente un parámetro que se puede utilizar aparte de las opciones generales, dicho parámetro es –text, éste establece un texto en el dialogo.
zenity --info \
--text="Conversion MP3 a OGG finalizada."
De manera similar se puede mostrar un mensaje de error, debemos recurrir a la opción –error para ello, por ejemplo:
if [ "${1}" -ne "0" ]; then
zenity --error \
--text="${2}"
exit ${1}
fi
Entradas de Texto
Se debe utilizar la opción –entry para crear cuadros de dialogos de entrada de texto, es importante hacer notar que Zenity retornará el contenido de la entrada de texto al error estándar. En el caso que necesite utilizar dicho valor en el script, será necesario hacer una redirección de los descriptores.
Dentro de esta categoría tenemos las siguientes opciones:
--text
especifica el texto que se mostrará en el cuadro de dialogo de entrada de texto.--entry-text
establece el texto que será mostrado en el campo de entrada en el cuadro de dialogo, ideal en los casos cuando quiere mostrar al usuario algún valor predeterminado.--hide-text
oculta el texto en el campo de entrada del cuadro de dialogo, ideal en aquellos casos cuando el valor ingresado es una contraseña.
Código de muestra
...
if zenity --entry \
--title="Ingreso de datos" \
--text="Ingrese el valor del Bitrate:" \
--entry-text="160" > bitrate.txt
then bitrate=$(head bitrate.txt); rm -f bitrate.txt
else bitrate="160"
fi
...
Ya para finalizar, solo espero que se animen a probar esta útil herramienta a la hora de desarrollar sus scripts, en principio Zenity es básico en su manejo e implementación, próximamente espero publicar un breve tutorial acerca del uso de Xdialog, el cual desde mi perspectiva es más profundo que Zenity.