Criar uma interface gráfica para scripts em shell é recomendado para quem deseja desenvolver um ambiente gráfico para oferecer uma interação amigável entre o usuário e seu script. Isto é muito importante, pois dominando o shell script você pode desenvolver scripts oferecendo um “acabamento” gráfico. Portanto, para aprender como desenvolver interfaces gráficas para seus seus scripts, continue lendo este arquivo!
O Zenity é um programa que utiliza o GTK, conjunto de bibliotecas projetadas para o desenvolvimento de interface gráfica, a partir de scripts em shell. O Zenity é muito simples de usar, produz muito escrevendo muito pouco. Ele facilita sua vida em programas curtos, poderosos e que necessitem de uma interface gráfica.
Além do Zenity, existe o YAD (Yet Another Dialog). Ele é um fork (“processo filho”) do Zenity (citado acima) e oferece mais opções gráficas para seus scripts. Para muitos, o YAD se torna uma opção completa para este fim. Sendo assim, nesse artigo irei mostrar, na prática, como desenvolver interfaces gráficas para seus scripts em shell tanto no Zenity como no YAD!
Interface gráfica com o Zenity
Por padrão, o Zenity vem instalado na maioria das distribuições Linux (FEDORA, UBUNTU, DEBIAN, MINT, etc). Portanto, não será necessário a instalação de um pacote adicional!
Como dito anteriormente, o Zenity é uma ferramenta bem simples de ser usada. Como no exemplo abaixo, basta uma linha de comando para oferecer um recurso gráfico imediato:
Contudo, para “dá vida” ao seu script em shell você precisará unir seus conhecimentos de programação shell a ferramenta Zenity. Como exemplo prático, segue um programa COMPLETO, que desenvolvi, onde listará os 10 arquivos, de maior tamanho, contidos na pasta pessoal do usuário:
Este script, carrega um tela inicial de aviso (zenity –info) e posteriormente invoca um processo de carregamento (zenity –progress), onde simultaneamente roda o comando find para buscar os 10 maiores arquivos da pasta /home do usuário! Por fim, exibe numa janela de texto (zenity –text-info) o resultado encontrado, como segue as imagens:
Recomendo que execute este arquivo no seu computador!
Interface gráfica com o YAD
O YAD não difere muito, em relação a estrutura de código, do Zenity. Contudo, diferentemente do Zenity, o YAD é preciso instalar um pacote para poder utilizá-lo. Nas distros derivadas do Debian (Ubuntu, Mint), você pode instalar via PPA:
Ou baixar o fonte no site oficial
O que há de mais inovador e interessante é a quantidade de recursos a mais que o YAD pode oferecer, como:
- Inserir imagens nos diálogos;
- Criar formulários com alto grau de complexidade;
- Criar diálogos drag’n drop;
- Criar diálogos com ícones de atalho
- Criar diálogos com barras de progresso múltiplas;
- E muito mais…
Só para você ter uma ideia, veja o resultado de ambos comandos de ajuda do app notification e observe as opções a mais que o YAD oferece:
Para ter uma noção, execute este comando no terminal; e veja um recurso do multi-progress (múltiplas barras de progresso) em funcionamento com YAD:
Ou veja este script carregando todas as aplicações contidas no seu sistema (interessante):
Conclusão
Por fim, para você conhecer todas as opções oferecidas nas duas ferramentas, tanto Zenity quanto YAD, execute os comandos de ajuda:
Para mais informações:
Muito bom. Uma dúvida, utilizando o “Zenity” quando eu clicar para fechar uma janela o mesmo não fecha e continua o script. No Zenity, teria como fazer um tratamento nesse aspecto utilizando o mesmo. Exemplo: Ao clicar no X da janela, o mesmo retornaria 1 (cancelar) e parar todas as atividades do script.
Flávio Oliveira, o zenity retorna na variável $? o valor 0 ao clicar em um botão de OK/Sim e 1 ao clicar em Cancelar/Não ou em fechar, então pra terminar o script tu pode usar uma condição tipo essa:
zenity --question --text="EXEMPLO"
if [ $? -eq 1 ]; then
echo "Terminando script..."
exit 1
fi
Dá pra usar o else também para ter uma mensagem específica quando clicar em OK/Sim e outra pra quando clicar em Cancelar/Não 🙂
Opa, valeu ai cara.. vou aplicar aqui para ver!
Obrigado por compartilhar
Até
Disponha! =D
Gênial!