Diálogos para KDE con kdialog

Este es uno de los capítulos del tutorial Diálogos para scripts. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.

Si eres de los que utilizan como escritorio KDE Plasma, el capítulo del tutorial de hoy sobre creación de diálogos para tus scripts te va a venir perfecto, porque te mostraré como crear diálogos para KDE. Esto no quita, que si utilizas cualquier otro entorno de escritorio, esto no te vaya a venir también a las mil maravillas. Pero, lo que no hay lugar a dudas, es que esta solución se integrará perfectamente con tu entorno de escritorio. En este caso, me centro en como crear diálogos para tus scripts con kdialog.

Creo, que esta solución, está a la altura de la que ofrece dialog, y que comenté en el capítulo sobre dialog para crear diálogos en el terminal. Evidentemente, esta solución con kdialog, tiene la ventaja que es ideal para el interfaz gráfico, con lo que puede ser la solución perfecta para el caso de que quieras proveer a tu script de un sencillo interfaz, para que los usuarios no tengan que lidiar con el terminal.

Diálogos para KDE con kdialog

Diálogos para KDE con kdialog

Si ya conoces dialog, o has seguido ese capítulo del tutorial que te he comentado anteriormente, es que la sintaxis es prácticamente la misma, con lo que acostumbrarte a esta nueva herramienta va a ser algo relativamente sencillo. Pero en este caso, los diálogos se integrarán perfectamente con tu escritorio, porque son diálogos para KDE. De cualquier forma, si no conoces dialog, tampoco te tienes que preocupar, porque como verás a continuación es una herramienta realmente sencilla de utilizar.

Instalación de kdialog

Al igual que hemos hecho en otros capítulos de este tutorial, lo primero que tienes que hacer es instalar esta herramienta. En el caso de que te encuentres en Debian, Ubuntu, Linux Mint, etc, tan solo tienes que ejecutar la siguiente instrucción en un terminal,

sudo apt install kdialog

En el caso de que quieras instalar en un RedHat o CentOS, tendrás que ejecutar la siguiente instrucción,

yum install kdialog

Indicarte, que al instalarlo en Ubuntu, me he llevado la sorpresa de la cantidad de paquetes que ha tenido que instalar. Entiendo que si tu entorno de escritorio es KDE Plasma, estos ya estarán instalados por defecto. Pero si no lo es, tampoco pasa nada. Eso si, esto es ideal para crear diálogos para KDE.

Un diálogo sencillo

De nuevo, siguiendo la estructura de capítulos anteriores de este tutorial, voy a repetir los diferentes ejemplos para que veas que, tanto la sintaxis como el resultado es tremendamente similar. Así, empiezo con un diálogo sencillo,

kdialog --title "https://www.atareao.es" \
        --msgbox "Este es el mensaje que se muestra"
Un mensaje de información

Indicarte que también puedes mostrarte, el mismo mensaje pero utilizando un icono de advertencia o error, en lugar de un icono de advertencia como has visto en el ejemplo anterior.

kdialog --title "https://www.atareao.es" \
        --sorry "Este es el mensaje que se muestra"
Un cuadro de diálogo con un mensaje de aviso
kdialog --title "https://www.atareao.es" \
        --error "Este es el mensaje que se muestra"
Un mensaje de error

Preguntando al usuario

Ahora, si quieres interactuar con el usuario, tendrás que preguntar, y darle algunas opciones de respuesta. En este caso, es de nuevo, tremendamente sencillo. Tan solo tienes que utilizar un script como el que te muestro a continuación,

kdialog --title "https://www.atareao.es" \
        --yesno "¿Quiere continuar?" 0 0
ans=$?
if [ $ans -eq 0 ]
then
    echo "Quiere continuar"
else
    echo "No quiere continuar"
fi
Un cuadro de diálogo donde contestar con un si o un no

Indicarte que el si se corresponde con el 0, mientras qui el no se corresponderé con el uno. De nuevo, al igual que viste con los cuadros de diálogos sencillos, también tienes la opción de utilizar iconos. Estos iconos te servirán para dar mayor información al usuario, indicando el tipo de pregunta que estás formulando. Así, para el caso de que quieras advertir, tienes que utilizar la opción --wanringyesno. Pero, también tienes otras opciones, como por ejemplo,

  • --warningcontinuecancel en lugar de mostrar los botones de yes y no, te mostrará los de cancelar o continuar.
  • --warninyesnocancel en este caso tendrías los botones de yes, no y cancel.
  • --yesnocancel aquí no se muestra el icono de warning.
kdialog --title "https://www.atareao.es" \
        --warningyesnocancel "¿Quiere continuar?" 
ans=$?
echo $ans
if [ $ans -eq 0 ]
then
    echo "Ha pulsado el botón Si"
elif [ $ans -eq 1 ]
then
    echo "Ha pulsado el botón No"
else
    echo "Ha pulsado el botón cancelar"
fi
Preguntar

Un diálogo para introducir texto

Ahora ya hemos conseguido que el usuario responda a nuestras preguntas. Sin embargo, seguro que llega un punto donde queremos que el usuario nos aporte algún tipo de información. Es decir, queremos obtener un texto del usuario. En este caso podemos utilizar el cuadro de diálogo del tipo --inputbox, tal y como puedes ver en el siguiente ejemplo,

respuesta=$(kdialog --title "https://www.atareao.es" \
                    --inputbox "¿Cual es tu nombre?" Lorenzo)
echo $respuesta
Un cuadro de diálogo para introducir tu nombre

Decirte que si pulsas el botón aceptar la variable $respuesta, tomará el valor que has introducido, mientras que si pulsas el botón cancelar no te devolverá nada.

En el caso de que lo que quieras es que el usuario introduzca una contraseña, tienes que utilizar la opción --password, tal y como puedes ver en el siguiente ejemplo,

respuesta=$(kdialog --title "https://www.atareao.es" \
                    --password "¿Cual es la contraseña?")
echo $respuesta
Un cuadro de diálogo para introducir una contraseña, con diálogos para KDE

Seleccionar entre diferentes opciones

Por supuesto, no todo se trata pedir al usuario que introduzca un texto o una contraseña. Es mucho mas fácil obtener una respuesta del usuario si le ofreces que elija entre distintas opciones, mas que si tiene que introducir el texto. En este caso, tienes diferentes opciones. La primera de las opciones te permite elegir una única opción de las diferentes que te muestra. Esto lo puedes hacer con el cuadro de diálogo tipo --radiolist, como puedes ver en el siguiente ejemplo,

respuesta=$(kdialog --title "https://www.atareao.es" \
                    --radiolist "Selecciona una opción" \
                    opcion1 queso on\
                    opcion2 aceitunas off\
                    opcion3 huevo off)
echo $respuesta
Seleccionar una opción

En el caso de quieras que el usuario seleccione varias opciones en lugar de una única opción, tienes que utilizar el cuadro de diálogo --checklist, tal y como puedes ver a continuación,

respuesta=$(kdialog --title "https://www.atareao.es" \
                    --radiolist "Selecciona una opción" \
                    opcion1 queso on\
                    opcion2 aceitunas off\
                    opcion3 huevo off)
echo $respuesta
Seleccionar varias opciones

Pero si no tienes bastante con estas dos soluciones, también puedes utilizar un cuadro de diálogo tipo combo como el que te muestro a continuación,

respuesta=$(kdialog --combobox "https://www.atareao.es" \
                    azul amarillo rojo "rosa palo")
ans=$?
if [ $ans -eq 0 ]
then
    echo "La opción seleccionada ha sido $respuesta"
else
    echo "No ha elegido ninguna opción"
fi
Un cuadro de diálogo con un combo, con diálogos para KDE

Fíjate que en este caso utilizo el if para saber si el usuario pulsó el botón de aceptar o el de cancelar. Por otro lado, fíjate como he indicado los colores. Para incluir el rosa palo, lo he puesto entre comillas. De otra manera, habría puesto 5 colores en lugar de cuatro, de los cuales, los dos últimos habrían sido el rosa y el palo.

Seleccionando archivos

Otra de las necesidades con las que te puedes encontrar cuando estás interactuando con un usuario de tu script, es la necesidad de que seleccione un archivo. En este caso, kdialog te ofrece la posibilidad de utilizar dos tipos de diálogo --getopenfilename y --getsavefilename. El primero para abrir un archivo existente, mientras que el segundo es para guardar un archivo. Un ejemplo del primer caso sería el siguiente,

respuesta=$(kdialog --title "https://www.atareao.es" \
                    --getopenfilename /home/ *.py "Selecciona un archivo")
echo $respuesta
Un cuadro de diálogo para seleccionar un archivo

Este cuadro de diálogo opcionalmente te permite que le indiques el directorio de partida así como si quieres un filtro. En el ejemplo anterior he puesto, el directorio /home/ y para que seleccione únicamente archivos con extensión .py. Pero podría no haber puesto ninguna de estas opciones, como en el caso del siguiente ejemplo, para guardar un archivo,

respuesta=$(kdialog --title "https://www.atareao.es" \
                    --getsavefilename "Selecciona un archivo")
echo $respuesta
Un cuadro de diálogo para guardar un archivo, con diálogos para KDE

En el caso de que lo que quieras es que el usuario seleccione un directorio, puedes utilizar el cuadro de diálogo --getexistingdirectory.

Para seleccionar un directorio

Como curiosidad, kdialog también te ofrece la posibilidad de seleccionar los archivos con formato uri. Es decir, el archivo /home/lorenzo/archivo.txt, se seleccionaría con el formato file:///home/lorenzo/archivo.txt. Esto lo puedes hacer con los cuadros de diálogo --getopenurl y --getsaveurl.

Por otro lado, en los cuadros de diálogo del tipo --getopenfilename y --getopenurl, puedes dar al usuario la opción de que seleccione varios archivos, en lugar de que seleccione uno solo. Para esto, tienes que utilizar la opción --multiple.

Seleccionando un color

¿Y si lo que quieres es que el usuario seleccione un color?. En este caso tienes un cuadro de diálogo específico para ello, --getcolor. En este caso, la respuesta te lo da en forma hexadecimal, es decir, del tipo #ff0000, por ejemplo. Un ejemplo de esto, lo puedes ver a continuación,

respuesta=$(kdialog --title "https://www.atareao.es" \
                    --getcolor)
echo $respuesta
Un cuadro de diálogo para seleccionar un color, con diálogos para KDE

Pero, ¿y si quisieras mostrar el cuadro de diálogo con una color ya preseleccionado? Por hacerle mas fácil la vida al usuario o por la razón que tu quieras. En este caso, tienes que elegir la opción --default. Esta opción no solo la puedes utilizar aquí también la puedes utilizar en el diálogo tipo --menu. Para que veas un ejemplo de esto,

respuesta=$(kdialog --title "https://www.atareao.es" \
                    --getcolor --default "#00ff00")
echo $respuesta

Una barra de progreso con muchas posibilidades

Tal y como te mostré en la primera de las opciones que vimos en este tutorial sobre diálogos, con kdialog también tienes la posibilidad de mostrar una barra de progreso, pero en este caso es algo mas sofisticada, en tanto en cuanto te devuelve una referencia a dbus para la comunicación. Con esto ya se puede hacer muchas cosas muy interesante, además de simplemente utilizar un timer. Por ejemplo,

respuesta=$(kdialog --progressbar "Ejemplo" 5)
echo $respuesta
for i in $(seq 0 5)
do
    sleep 1
    echo $i
    dbus-send --print-reply --dest=$respuesta org.freedesktop.DBus.Properties.Set string:org.kde.kdialog.ProgressDialog string:value variant:int32:$i
done
dbus-send --print-reply --dest=$respuesta org.kde.kdialog.ProgressDialog.close
Una barra de progreso

La última línea es la que se encarga de cerrar el cuadro de diálogo cuando termine la cuenta progresiva.

Seleccionar un entero

Si lo que quieres es que el usuario mediante un cuadro de diálogo seleccione un valor entero, puedes utilizar el cuadro de diálogo tipo --slider, tal y como el que puedes ver a continuación,

respuesta=$(kdialog --slider "Selecciona un valor entre 1 y 10" \
                    1 10 2)
ans=$?
if [ $ans -eq 0 ]
then
    echo "No ha elegido ningún valor"
else
    echo "El valor elegido es $respuesta"
fi
Cuadro de diálogo par aseleccionar un valor

Seleccionando fechas

Si lo que quieres es que el usuario seleccione una fecha, puedes utilizar en ese caso el cuadro de diálogo tipo --calendar, como el ejemplo que te muestro a continuación,

respuesta=$(kdialog --calendar "Elige una fecha señalada")
ans=$?
if [ $ans -eq 0 ]
then
    echo "No ha elegido ninguna fecha"
else
    echo "La fecha seleccionada ha sido $respuesta"
fi
Un cuadro de diálogo para seleccionar una fecha, con diálogos para KDE

Conclusión

Como puedes ver, con kdialog, el resultado está mucho mas consolidado que con las opciones que has visto anteriormente. Sobre todo quieres mostrar diálogos para KDE, en cuyo caso esta opción se debería integrar perfectamente. En el caso de GNOME, lo cierto es que el resultado no es tan espectacular. Sin embargo, lo que está claro es que te da un gran abanico de posibilidades.

Desde luego, de las opciones que has podido ver, sin lugar a dudas, la que mas me ha llamado la atención, y por supuesto, la que mas me ha gustado es la barra de progreso, por la facilidad que te ofrece a la hora de integrarse con otros procesos. La verdad es que me ha gustado mucho.


Más información,

Imagen de portada de XPS en Unsplash

Deja una respuesta

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