Zenity – Exibindo caixas de diálogo com scripts do Shell no Linux

Zenity – Exibindo caixas de diálogo com scripts do Shell

Zenity é um software que permite criar diversos tipos de caixas de diálogo simples para interação com os usuários em um ambiente Linux, que podem ser utilizadas em scripts do shell.

Por exemplo, podemos criar um diálogo para obter informações do usuário, como uma data em um calendário ou um valor numérico em uma caixa de texto, ou ainda criar diálogos para exibir informações, como uma barra de progresso para mostrar o status de uma operação, ou caixas de aviso e de erro.

O Zenity utiliza o GTK, conjunto de bibliotecas utilizado para a construção de interfaces gráficas.

Por padrão, ele vem instalado na grande maioria das distribuições Linux, de modo que seja provável que o programa já esteja presente em sua distro. Verifique a presença do programa emitindo o comando  seguir no terminal:

zenity --version

Se o programa estiver instalado, será exibida a versão do programa. A versão mais recente é a 3.22.0 (na data de elaboração deste tutorial).

Caso contrário, instale-o usando os seguintes comandos:

Sistemas Debian / Ubuntu:

sudo apt-get install zenity

Sistemas Red Hat / CentOS:

yum install zenity

Sintaxe

A sintaxe básica para uso do programa é a seguinte:

zenity [opções-comuns] [tipo-de-diálogo] [opções-específicas-do-diálogo]

Tipos de Caixas de Diálogo

O Zenity permite criar os seguintes tipos de caixas de diálogo:

  • Calendar
  • File selection
  • Forms
  • List
  • Notification icon
  • Message
    • Error
    • Information
    • Question
    • Warning
  • Password entry
  • Progress
  • Text entry
  • Text information
  • Scale
  • Color selection

Códigos de saída

Os seguintes códigos de saída são retornados ao executar o programa:

Código de Saída Descrição
0 O usuário pressionou os botões OK ou Fechar
1 O usuário pressionou Cancelar ou usou as funções da janela para fechar o diálogo
-1 Ocorreu um erro inesperado
5 A caixa de diálogo foi fechada porque ocorreu timeout (tempo esgotado)

Opções Comuns

No Zenity, todas as caixas de diálogo suportam as seguintes opções gerais:

–title=title
Especifica o título da caixa de diálogo.
–window-icon=icon_path
Especifica o ícone que é exibido na janela da caixa de diálogo. Existem 4 tipos de ícones disponíveis      que podem ser selecionados usando-se as seguintes palavras-chave: “info”, “warning”, “question” e “error”.
–width=width
Especifica a largura caixa de diálogo.
–height=height
Especifica a altura caixa de diálogo.
–timeout=timeout
Especifica o timeout em segundos após o qual a caixa de diálogo é fechada.

Outras opções

–about
Mostra o diálogo Sobre o Zenity, o qual contém informações sobre a versão do Zenity, copyright e informações sobre os desenvolvedores do software.
–version
Mostra o número de versão do programa.

Caixa de Diálogo File Selection (Seleção de Arquivos)

Com esta caixa o usuário pode selecionar um arquivo a partir de um diretório, e o arquivo é retornado na saída padrão.
O modo padrão de operação do diálogo de seleção de arquivos é o modo open (abrir).

Opções principais:

–filename=NOME_ARQUIVO
Especifica o arquivo ou diretório a ser selecionado na caixa de seleção quando a caixa é exibida pela primeira vez

–multiple
Permite a seleção de múltiplos nomes de arquivo na caixa de diálogo de seleção

–directory
Permite apenas a seleção de diretórios na caixa de seleçãoo

–save
Permite configurar o diálogo de seleção de arquivos no modo Save (salvar)

–separator=SEPARADOR
Especificar a string que será utilizada para dividir a lista de nomes de arquivos retornada.

–file-filter=FILTRO
Permite usar um filtro para especificar o tipo de arquivos que deverá se exibido no diálogo

Exemplos

Vejamos alguns exemplos de uso do utilitário em scripts do shell:

Exemplo 01 – Caixa de diálogo de erro, contendo um botão OK (digitar o comando diretamente no terminal):

zenity --title "Problema detectado"  --error --text="Arquivo requisitado inválido."

Exemplo 02 – Caixa de diálogo de texto. Crie um arquivo de texto e entre com os comandos a seguir. Logo após, salve o arquivo com o nome de teste-zenity.sh e dê permissão de execução ao script com o comando chmod 755 teste-zenity.sh:

#!/bin/bash
nome=$(zenity --title="Nome?" --text "Qual é o seu nome?" --entry)
zenity --info --title="Boas-vindas" --text=" $nome" --width="100" height="50"
sobrenome=$(zenity --title="Sobrenome" --text "$primeiro Qual é o seu sobrenome?" --entry)
zenity --info --title="Bóson Treinamentos" --text="Bons estudos, $nome $sobrenome"

Para rodar o script, execute o comando a seguir:

./teste-zenity.sh

Veja duas telas deste script em execução:

Caixa de diálogo com Zenity no Linux

 

Caixa de diálogo de texto com Zenity no Linux

Exemplo 03: Exibindo um diálogo de calendário, capturando a data escolhida pelo usuário em uma variável, e exibindo a data no terminal:

#!/bin/bash
# Capturando a data escolhida pelo usuário a partir de um calendário
data=$(zenity --title="Escolha a data" --calendar)
if (( data ))
then
  echo "A data escolhida foi o dia $data"
else
  echo "Usuário não escolheu nenhuma data"
fi

Caixa de diálogo de calendário com Zenity no Linux

Exemplo 04: Usando uma caixa de diálogo de seleção de arquivos para selecionar um arquivo de texto:

#!/bin/bash
# Selecionando um arquivo de texto a partir de uma caixa de diálogo

ARQUIVO=$(zenity --file-selection --title="Selecione um arquivo")

case $? in
    0)
        echo "$ARQUIVO selecionado.";;
    1)
        echo "Nenhum arquivo selecionado.";;
    -1)
        echo "Ocorreu um erro desconhecido.";;
esac

Exemplo 05: Abrindo um arquivo de texto com extensão .sh e exibindo seu conteúdo em uma caixa de diálogo:

#!/bin/bash
# Selecionando um arquivo de texto a partir de uma caixa de diálogo
ARQUIVO=$(zenity --file-selection --title="Selecione um arquivo" --file-filter="*.sh")
# Usando o diálogo Text Information para exibir o conteúdo do arquivo selecionado:
if [ $ARQUIVO ]
then
    zenity --text-info --title="Arquivo" --filename=$ARQUIVO --width=450 --height=500
fi

Exemplo 06: Criando um formulário para captura de dados para um cadastro de usuário:

#/bin/bash
# Criando um formulário com o Zenity
DADOS=$(zenity     --forms --title="Cadastro" --text="Preencha o formulário a seguir com seus dados:" \
    --separator="," \
    --add-entry="Nome" \
    --add-entry="Sobrenome" \
    --add-calendar="Data de Nascimento" \
    --add-entry="E-mail")
echo $DADOS | cut -d, -f1
echo $DADOS | cut -d, -f2
echo $DADOS | cut -d, -f3
echo $DADOS | cut -d, -f4

Exemplo 07: Selecionando itens em uma lista de itens:

#/bin/bash
# Usando uma lista com botões de rádio com o Zenity
ITEM_SELECIONADO=$(zenity  --list  --text "Selecione seu sistema favorito" \
    --radiolist \
    --column "Marcar" \
    --column "Sistemas" \
    FALSE BSD TRUE Linux FALSE "OS X" FALSE Windows);
echo "Seu sistema operacional favorito é o $ITEM_SELECIONADO";

Lista de rádio com Zenity em Shell Scripting

É isso aí! Vimos alguns exemplos do uso do Zenity para criar caixas de diálogo no Linux. Se você quiser se aprofundar no assunto, recomendo uma consulta à página oficial do manual do Zenity: https://help.gnome.org/users/zenity/3.22/

 

Sobre Fábio dos Reis (1195 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

4 Comentários em Zenity – Exibindo caixas de diálogo com scripts do Shell no Linux

  1. Bruno Chaves // 28/08/2019 em 18:36 // Responder

    Muito bom Fábio, estou desenvolvendo um shell script de pós instalação do ubuntu 18.04, mas roda em linha de comando ainda vou implementar interface gráfica, essas informações me ajudaram de +

    SE TIVER INTERESSE EM VER O PROGRAMA:
    https://github.com/Brunopvh/apps-bionic

    ## Somente para ubuntu 18.04 LTS.

  2. Muito obrigado, me ajudou bastante!

  3. Isaac Soares Veloso // 08/12/2021 em 15:00 // Responder

    Muito Bom!

Escreva um comentário

Seu e-mail não será divulgado


*