Usos prácticos de la caja de dialog Zenity

Yo frecuento mucho los foros de mi país… y honestamente, es raro encontrar algo interesante. No obstante en uno de esos foros, hay un usuario que ha hecho dos posts interesantes sobre Linux, y este es el primero (que deseo compartir con ustedes):

Usos prácticos de la caja de dialog Zenity

Zenity es un conjunto de cajas de diálogos gráficas que usan las librerías gtk, con este programa podremos introducir datos, seleccionar una lista de tareas, mostrarnos la información resultante de un proceso dado,  permitirnos hacer una interrupción antes o durante un proceso determinado, entre otras funciones.

Zenity consta de alrededor de 13 cajas de dialogo gráficas, veamos cuales son estas y sus posibles combinaciones:

1- Para mostrarnos un calendario y seleccionar una fecha deseada (dicha fecha se mostrara en formato numérico una ves seleccionada):

zenity --calendar

2- Para introducir texto (muy útil a la hora de pedirnos datos o el nombre de un archivo)

zenity --entry

Combinémolas correctamente para que nos pida los datos a introducir

zenity --entry --text "Escriba el nombre del archivo"

3- Para informarnos que ha ocurrido un error

zenity --error --text "Imposible continuar"

4- Para seleccionar un archivo

zenity --file-selection $HOME

Agregándole esta opción nos permite seleccionar varios archivos:
--multiple

Con esta seleccionara solo las carpetas
--directory

Con esta en ves de seleccionar estaremos activando la opción de guardar
--save

Con esta evitaremos que se sobrescriba un archivo existente:
--confirm-overwrite

5- Mostrarnos una información determinada

zenity --info *text "Información a mostrar"

6- Mostrarnos una lista de opciones y seleccionar una o un grupo de estas:
zenity --list --column "nombre de columna" "opcion1" "opción2" "opción3" "opción4"

Ahora que pasa si queremos tener una lista de acciones para determinados archivos, pero queremos que se muestre el nombre de la acción a realizar. Para lograr esto tenemos que usar estas dos opciones (–hide-column valor y *print-column valor) quedaría de esta forma:

zenity --hide-column 2 --print-column 2 --list --column "nombre de columna" --column "columna oculta" "nombre1" "comando1" "nombre2" "comando2"

Si queremos seleccionar más de una acción a la ves debemos agregar estas dos opciones
Texto que separara la secuencia elegida de la otra (en este caso agregamos esta » » que significa un espacio
--separator=" "

Y la opción que nos permitirá seleccionar más de una acción a la vez
--multiple

7- Mostrarnos una notificación en la barra de menús

zenity *notification *text "Texto deseado"

8- Mostrarnos el progreso de un proceso dado:
zenity --progress --pulsate

9- Con esta nos mostrara una pregunta y podremos elegir si queremos continuar o no con el proceso:

zenity --question --text "Desea Continuar"

10- Con este podremos recibir el resultado de una secuencia en la consola como el listado de una búsqueda de archivos la consultas de ayudas entre otras:

zenity --text-info zenity --help-all | zenity --text-info

11- Este nos puede informar de que el proceso ha sido interrumpido.

zenity --warning --text "El proceso ha fallado" ls /media/carpeta || zenity --warning --text "No existe el directorio"

12- Con este podremos seleccionar un número dado mediante una barra deslizadora:

zenity --scale

Agregándole esta opción podremos delimitar el valor mínimo:
--value 60 --min-value 60
(la opción –value nunca deberá ser menor que la de *min-value)

Con esta seleccionamos el valor máximo
--max-value 100

13- Con esta nos mostrara una caja de dialogo con la que podremos seleccionar un color deseado tomar el color de otro lado con el llamado gotero selector de color.
zenity --color-selection --show-palette

Después de ver cuales son las cajas de diálogos disponibles en este programa veamos algunos ejemplos prácticos con estos:

– Veamos como podemos mezclar la caja de dialogo de introducir texto
mediante un script:

#!/bin/bash

#Darle a una palabra una secuencia de comandos.

archivo="`zenity --entry --text "Escriba el nombre del archivo"`"

#comando para renombrar

mv "$@" "`dirname "$@"`"/"$archivo"

– Vemos como combinar la caja de dialogo número 12 de escalas numéricas:
(Este es un script simple para bajarles la calidad de las imágenes jpg y así reducir su el espacio que ocupa en nuestros discos )

#!/bin/bash

#Darle a una palabra una secuencia de comandos.

foto="`zenity --scale --value 80 --min-value 60 --max-value 100`"

#comando para comprimir la imagen

mogrify -compress jpeg -quality "$foto%" "$@"

– Veamos otro ejemplo don usaremos la caja de dialogo selector de color donde le agregaremos un marco del color que seleccionemos a una foto:

#!/bin/bash

#Darle a una palabra una secuencia de comandos.

foto="`zenity --color-selection --show-palette`" marco="`zenity --entry --text "Seleccione el rango deseado 6x6"`"

#comando para agregarle el marco

mogrify -border $marco -bordercolor $foto "$@"

– Veamos un ejemplo con la caja de dialogo de mensajes de error:

#!/bin/bash

rm "$@" || zenity --error --text "Imposible de eliminar esto es una carpeta"

Como ven si alguien intenta borrar una carpeta el proceso devuelve error por lo que la cadena continua gracias a estos operadores ||.

– Veamos ahora que podemos hacer con la caja de dialogo de número 6, seleccionando las acciones que realizaremos sobre determinado archivo:

#!/bin/bash

actions="`zenity --multiple --separator="" --hide-column 2 --print-column 2 --list --column "nombre de columna" --column "columna oculta" "comprimir un 80%" " -compress jpeg -quality 80%" "Cambiar tamaño a 800x600" " -resize 800x600"`"

#Comando

mogrify$actions "$@"

Fíjense que en la casilla de comandos existe un espacio ya que no permite que el texto empiece con un guión, por lo tanto el delimitador en este caso tiene que ser nulo –separator=»».

– Veamos otro ejemplo con la caja de dialogo de progreso

#!/bin/bash

#Script para eliminar

zenity --question --text "Desea borrara las imágenes dentro de esta carpeta `basename "$@"`" && find "$@" -name *.jpg -delete | zenity --list --progress * pulsate

… Y bueno esto es todo.

Espero poder traerles más posts que resulten interesantes.

Saludos


Deja tu comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   Rots87 dijo

    yo para lo unico que usaba el zenity era por que winetricks lo pide para funcionar bien (al menos en mi arch) jejeje gracias por el tip

  2.   elav <° Linux dijo

    Zenity sirve para algunos otros truquillos, como el del buscador de Xfce 😀

  3.   Aarón Mendo dijo

    Gracias, muchísimas gracias, que bueno que hablas de Gtk+ yo también he usado zenity aún no lo entiendo muy bien pero después con la información que has dado y con practica tal vez le encuentre un uso practico.

    Saludos.

  4.   Neo61 dijo

    oye camagueyano (tengo un teclado en frances que no me deja encontrar los dos pinticos de la u…jejeje), me podrías explicar bien para que me sirve esto? Y si, todo esto se hace por consola? seria bueno si postearas algunas imágenes de capturas para que se ilustren los ejemplos y así se ve mejor a que te refieres

    1.    KZKG^Gaara dijo

      En realidad este artículo no lo escribí yo, sino un usuario de un foro nuestro.
      Sí, todo esto se hace por consola, y … ¿para qué sirve? Bueno, es muy simple: «conocimiento».

    2.    manolox dijo

      Un ejemplo de uso que se puede dar a zenity para alguien con el teclado en francés.


      #! /bin/bash
      # Un cambiador de teclado

      ACTION=`zenity --width=0 --height=260 --list\
      --title "Selector de setxkbmap" --text "Elige tu teclado"\
      --column "Idioma"\
      "Español"\
      "Francés"\
      "Inglés"\
      "Gringo"\
      "Alemán"`

      if [ -n "${ACTION}" ]; then
      case $ACTION in
      Español)
      setxkbmap es && zenity --info --text "Teclado configurado correctamente a español" || zenity --info --text "Por alguna razón no fue posible cambiar el mapa de teclado."
      ;;
      Francés)
      setxkbmap fr && zenity --info --text "Dicho sea en francés: Teclado configurado correctamente a francés" || zenity --info --text "Por alguna razón no fue posible cambiar el mapa de teclado."
      ;;
      Inglés)
      setxkbmap gb && zenity --info --text "Dicho sea en inglés: Teclado configurado correctamente a inglés" || zenity --info --text "Por alguna razón no fue posible cambiar el mapa de teclado."
      ;;
      Gringo)
      setxkbmap us && zenity --info --text "Dicho sea en Gringo: Teclado configurado correctamente a Gringo" || zenity --info --text "Por alguna razón no fue posible cambiar el mapa de teclado."
      ;;
      Alemán)
      setxkbmap de && zenity --info --text "Dicho sea en alemán: Teclado configurado correctamente a alemán" || zenity --info --text "Por alguna razón no fue posible cambiar el mapa de teclado."
      ;;
      esac
      fi

      1.    manolox dijo

        Vaya, que pena. Copiando y pegando directamente no funciona porque al convertirse en comentario «irrespeta» los saltos de línea dispuestos tras cada barra invertida «\».

        Para que funcione hay que cambiar las barras invertidas seguidas de un salto de línea por un simple espacio.
        No lo copipego otra vez para no saturar los comentarios, pero para que quede claro, desde la tercera línea hasta la octava, ambas inclusive, debe quedar en una sola línea tal que así:

        ACTION=`zenity –width=0 –height=260 –list –title «Selector de setxkbmap» –text «Elige tu teclado» –column «Idioma» «Español» «Francés» «Inglés» «Gringo» «Alemán»`

        1.    Manuel de la Fuente dijo

          Si quieres compartir código en los comentarios puedes guardarlo en el Paste y pegar la URL en tu comentario. 🙂

          1.    manolox dijo

            Excelente herramienta. No sabía que existía tal cosa en DesdeLinux.
            La próxima vez que un comentario requiera código lo usaré.
            Gracias por la info. XD

  5.   Neo61 dijo

    AH…y si ves que estoy usando Linux es por que uso los dos, pero me interesa adentrarme bien en Linux

  6.   Santiago dijo

    Muy bueno el artículo!! Es super útil zenity.

    Yo lo uso en un script de thunar que redimensiona las imágenes seleccionadas, y con una lista ofrezco los tamaños de las imágenes estandares.

    Saludos!!

  7.   Hyuuga_Neji dijo

    necesito que me digan donde encontrar el Zenity ese porque ya busque y no esta en el repo que tengo…. que feliz soy usando un repo que no descargue yo mismo… (Alerta: Modo Sarcástico detectado en este comentario)

  8.   José Sales dijo

    a ver ¿que te parece este?
    #!/bin/bash
    cancion=$(zenity –width=360 –height=320 –title «Lanzador» –file-selection –directory $HOME)
    find «$cancion» -name *.mp3 | sort –random-sort | head -n 100 | xargs -d ‘\n’ mpg123
    aun me falta mejorarlo un poco