Zenity: interface gráfica para scripts, parte 2

More fun with Zenity: shell script/GUI interactivity
Autor original: Ryan Cartwright
Publicado originalmente no:
freesoftwaremagazine.com
Tradução: Roberto Bechtlufft

Na primeira parte deste artigo eu apresentei o Zenity, uma ferramenta útil que adiciona uma interface gráfica aos seus shell scripts. Nesta segunda parte vou um pouco mais fundo, mostrando o tipo de coisa que se pode fazer com essa ferramenta versátil.

Além das janelas informativas

O Zenity pode fazer bem mais do que exibir janelas informativas (embora elas possam ser bastante úteis). Ele oferece uma vasta gama de janelas que podem ser usadas pelo usuário para dar feedback e informar suas escolhas aos scripts. Alguns exemplos incluem não apenas as tradicionais janelas de erros, avisos, perguntas e indicadores de progresso, mas também calendários, entradas de texto, listas e escolhas de arquivos. Sem querer copiar o manual do Zenity, vamos dar uma olhada em algumas dessas opções.

Erros e avisos

Essencialmente, elas são idênticas às janelas de informações, mas exibem um ícone diferente na janela. Este código exibe uma janela de aviso:

zenity –warning –text “Arquivo de configuração não encontrado!nUsando as configurações padrão.”
–title “Aviso do MeuScript”

Observe o uso do n para inserir uma quebra de linha. Observe também o uso do parâmetro title (título). Se você não fornecer um título personalizado, o Zenity usará o tipo de janela como título (nesse caso, a janela se chamaria “Warning”, ou “Aviso” se o sistema estiver em português).

Conversando com o usuário

Escolha de arquivos

Vamos supor que seu script peça ao usuário um caminho para um arquivo, talvez (continuando o exemplo acima) para carregar um arquivo de configuração caso não seja possível encontrar algum. Você pode apresentar a ele uma janela de escolha de arquivos familiar:

CONFIG_FILE=`zenity –file-selection –title “Selecione um arquivo de configuração”`
case $? in
0) source $CONFIG_FILE;;
1) zenity –warning –text “Nenhum arquivo de configuração foi selecionadonUsando configurações padrão”;;
-1) zenity –warning –text “Nenhum arquivo de configuração foi selecionadonUsando configurações padrão”;;
esac

Esse código apresenta uma janela que permite selecionar um arquivo. Ela retorna 0 se o usuário clicar em OK e 1 se clicar em Cancelar. Se algo der errado, ela retorna -1. Usando isso em seus scripts você pode pedir ao usuário que forneça caminhos para arquivos que serão usados mais adiante. Se quiser limitar o usuário a diretórios e não a arquivos, adicione a opção --directory.

Entrada de texto

Outra maneira de obter feedback do usuário é com uma caixa de entrada de texto. Veja este código, por exemplo:

ENTRY=`zenity –entry –text “Digite seu nome” –entry-text “Nome” –title “Digite seu nome”`
if [ $? == 0 ] then
zenity –info –text “Olá $ENTRY!”
fi

Observe como a opção --entry-text preenche a caixa de texto e já deixa o texto selecionado para ser substituído. A propósito, nem todas essas opções são necessárias. A janela de entrada mais simples é zenity --entry, e isso também se aplica à maioria das outras janelas do Zenity.

Calendário

Você já deve estar pegando o jeito da coisa, mas e se o usuário tiver que fornecer uma data? Use a opção --calendar, em um comando como zenity --calendar. Esse comando retorna a data no formato curto do locale do sistema (no Brasil, o formato costuma ser DD-MM-AAAA). Para deixar uma data pré-selecionada, use as opções --day, --month e --year. O formato retornado pode ser configurado usando códigos “strftime” comuns:

DATE=`zenity –calendar –day “20” –month “2” –year “2009” –date-format=”%Y-%m-%d”`
if [ $? == 0 ] then
echo $DATE
fi

Isso abre uma janela com o dia 20 de fevereiro de 2009 selecionado, e a data escolhida será retornada no formato AAAA-MM-DD. Nem --day nem --month aceitam zeros na frente, e em -year você deve fornecer números de quatro dígitos. Se passar “89” ele vai entender como ano 89, e não 1989.

Perguntas

Nenhum conjunto de janelas estaria completo sem as perguntas. O Zenity oferece janelas simples para perguntas, com rótulos fixos para os botões. Isso significa que você tem que formular a pergunta de modo que as respostas “Ok” e “Cancelar” soem coerentes. Por isso, ao invés de “Prosseguir sem um arquivo de configuração?”, você pode preferir “Arquivo de configuração não encontrado. Clique em OK para usar os padrões ou em Cancelar para interromper o script.” Na primeira pergunta, não ficaria claro se o botão Cancelar interromperia o script ou abriria uma janela insistindo na escolha de um arquivo. A segunda pergunta não confunde o usuário. A janela com a pergunta retorna 0 se o botão OK for clicado e 1 se o botão Cancelar ou o botão para fechar a janela for clicado.

Dando feedback ao usuário

Além das janelas de informações, erros e avisos, a janela de progresso pode ser útil para manter o usuário informado. Na primeira parte deste artigo eu falei sobre como usei o Zenity para oferecer a uma amiga uma interface gráfica para um script de conexão 3G. Naquela situação poderiam haver atrasos na negociação do modem com a rede 3G em busca de conexão. Durante esse atraso eu usei uma janela de progresso para que ela saiba que tem alguma coisa acontecendo:

connect.sh up | zenity –progress –text “Conectando, aguarde…” –pulsate

A opção --pulsate é útil aqui porque só estou dizendo “agüente aí que estou trabalhando”. Não tenho nenhuma porcentagem real a oferecer, então essa opção faz a barra de progresso se mover de uma lado para o outro, que nem a luz no capô da Super Máquina. Se precisar exibir informações quanto ao nível de progresso, “ecoe” as porcentagens para o zenity:

( for FILE in find $START_DIR –name $FILE_NAME;
do
echo 1;
echo $FILE >> $OUTPUT_FILE;
done
echo 100;
echo “#Todos os arquivos estão listados em $OUTPUT_FILE”
) | zenity –progress –percentage=0 –text “Procurando arquivos…” –title “Encontrar e listar arquivos”;

Sim, eu sei que há maneiras bem mais simples de passar a lista de arquivos de um diretório para um arquivo de texto, é só um exemplo. O exemplo acima presume que não haja mais de 100 arquivos no diretório, e francamente, a barra de progresso vai chegar a 100% quase que imediatamente.

Por enquanto está bom

Ainda há muito a dizer sobre o Zenity, mas isso já deve ter aberto seu apetite. Os comandos de ajuda do Zenity são excelentes e há muitos outros recursos online que podem ajudar.

A quantidade de usuários GNU/Linux que não tem entrosamento com o shell cresce cada vez mais, e ferramentas como o Zenity fazem toda a diferença para que possamos ajudá-los. Embora algumas tarefas precisem de interfaces gráficas com mais recursos, ferramentas como o Zenity, o Dialog e o Kdialog reforçam a idéia de que os bons tempos de “fazer um shell script rapidinho” ainda não acabaram.

Créditos a Ryan Cartwrightfreesoftwaremagazine.com
Tradução por Roberto Bechtlufft <roberto at bechtranslations.com>

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X