Escolar Documentos
Profissional Documentos
Cultura Documentos
Interface de menus e caixas de dilogos grficos Abaixo segue um exemplo onde voc pode criar menus para interagir com o usurio, primeiro mostrado opes com menus, em seguida o usurio escolhe um dos itens dos menus, e depois de acordo com a escolha apropriada do item do menu exibido o resultado da escolha.
$ nano
menus
#!/bin/bash # script com menus while true do clear echo "-----------------------" echo " Escolha a opo " echo "-----------------------" echo "[1] Exibe a data" echo "[2] Exibe os arquivos do diretrio atual" echo "[3] Exibe o calendrio" echo "[4] Exibe o editor de texto nano" echo "[5] Sair" echo "======================" echo -n "Escolha uma das opes entre [1-5]" read OPCAO case $OPCAO in 1) echo "Hoje `date` , Pressione uma tecla" ; read ;; 2) echo "Os arquivos em `pwd` so `ls`" ; echo "Pressione uma tecla..." ; read ;; 3) cal ; echo "Pressione uma tecla..." ; read ;; 4) nano ;; 5) exit 0 ;; *) echo "Ateno!!! Por favor selecione 1,2,3,4 ou 5" ; echo "Pressione uma tecla..." ; read ;; esac done
interface_grafica_usuario
----------------------[1] Exibe a data [2] Exibe os arquivos do diretrio atual [3] Exibe o calendrio [4] Exibe o editor de texto nano [5] Sair ====================== Escolha uma das opes entre [1-5]
Abaixo segue a descrio dos comandos do programa na tabela: Comandos Explicao Inicia o loop infinito, e somente finalizado quando for escolhido a opo 5 (Sair) no menu Inicia o loop Limpa a tela toda vez que escolhido uma opo do menu
while true
do
Pergunta para o usurio o nmero do item do menu L o nmero do item do menu Executa a ao apropriada de acordo com o item escolhido no menu entre 1 e 5, e quando exibir a mensagem de erro ser solicitado para o usurio escolher um valor entre 1 e 5 novamente
case $OPCAO in
1) echo "Hoje `date` , Pressione uma tecla" ; read ;; 2) echo "Os arquivos em `pwd` so `ls`" ; echo "Pressione uma tecla..." ; read ;; 3) cal ; echo "Pressione uma tecla..." ; read ;; 4) nano ;; 5) exit 0 ;; *) echo "Ateno!!! Por favor selecione 1,2,3,4 ou 5" ; echo "Pressione uma tecla..." ; read ;;
interface_grafica_usuario
esac
Encerra o loop, se o item 5 (Sair) do menu for escolhido Para interagir com usurio, podemos criar interfaces com menus em modo texto ou em modo grfico, onde antigamente em verses antigas do Linux eram usados os programas dialog e xdialog onde era necessrio instala-los a partir do CD-ROM da sua distribuio Linux ou atravs do repositrio de pacotes.
done
# apt-get install dialog xdialog Atualmente esses programas foram substitudos pelo programa zenity que corresponde ao gdialog (Gnome), que j vem instalado por padro e utiliza a biblioteca GTK+ da interface grfica do Gnome para interagir com usurio exibindo caixas de dilogo usando um cdigo de sada para um script.
Sintaxe:
zenity opes Opes: Opo --calendar --entry --error --file-selection --info --list --notification --progress --question --text-info --warning --scale Exemplo: O exemplo abaixo exibe uma caixa de pergunta, onde o usurio pode escolher Sim ou Cancelar e feito um teste lgico comparando com a varivel especial $? que armazena a sada do comando zenity, onde Sim 0 e Cancelar 1. Descrio Exibe um calendrio Exibe uma caixa de texto de entrada Exibe uma caixa de dilogo de erro Exibe uma caixa de dilogo para selecionar um arquivo Exibe uma caixa de dilogo de informao Exibe uma caixa de dilogo de listagem Exibe um cone de notificao Exibe uma barra de progresso Exibe uma caixa de dilogo de pergunta Exibe uma caixa de dilogo de texto de informao Exibe uma caixa de dilogo de aviso Exibe uma caixa de dilogo de escala
interface_grafica_usuario
#!/bin/bash zenity --question if [ $? -eq 0 ] then echo "Voc escolheu Sim" elif [ $? -eq 1 ] then echo "Voc escolheu Cancelar" fi
Opes de ajuda:
zenity --help Exemplo: $ zenity --help-entry
Uso: zenity [OPES...]
Opes de entrada texto --entry Mostrar dilogo de entrada de texto --text=TEXTO Definir o texto do dilogo --entry-text=TEXTO Definir o texto introduzido
interface_grafica_usuario
Opes gerais: Opo geral --title=TITULO Descrio Define um ttulo para a caixa de dilogo
--window-icon=Caminho_do_cone Define um cone na janela --width=LARGURA --height=ALTURA Exemplo: $ zenity --title "Titulo" --window-icon=icone.jpg --width=400 --height=200 --text-info --filename=/etc/passwd Define a largura da caixa de dilogo Define a altura da caixa de dilogo
Opes de calendrio (--calendar) : Opo --text=TEXTO --day=DIA --month=MS --year=ANO Exemplo: Descrio Define o texto da caixa de dilogo Define o dia do calendrio Define o ms do calendrio Define o ano do calendrio
interface_grafica_usuario
Opes de caixa de texto (--entry): Opo --text=TEXTO --entry-text=TEXTO --hide-text=TEXTO Exemplo: $ zenity --entry --text="Digite seu nome" --entry-text="Digite aqui" Descrio Define o texto do dilogo Define o texto que ser exibido inicialmente Esconde o texto digitado na caixa de texto
interface_grafica_usuario
Opes de erro (--error): Opo --text=TEXTO --no-wrap Exemplo: $ zenity --error --text="Mensagem de erro" --no-wrap Descrio Define o texto do dilogo No habilita quebra de linha no texto
Opo
Descrio
--filename=NOMEARQUIVO Define o nome do arquivo --multiple --directory Permite seleo de mltiplos arquivos Ativa apenas seleo de diretrios
interface_grafica_usuario
Ativa o modo salvar Confirma seleo do arquivo se o nome do arquivo j existe Define qualquer caractere separador de sada (Exemplo , : - ; |/)
interface_grafica_usuario
Opes de informao (--info): Opo --text=TEXTO --no-wrap Exemplo: $ zenity --info --text="Mensagem de informao..." --no-wrap Descrio Define o texto do dilogo No habilitar quebra de linha no texto
Opes de listagem (--list): Opo --text=TEXTO --column=COLUNA --checklist --radiolist --separator=SEPARADOR --multiple --editable --print-column=NMERO --hide-column=NMERO Exemplo 1: $ zenity --list --text="Listagem" --checklist --column="Escolha" --column="Produto" TRUE DVD FALSE Livro Descrio Define o texto do dilogo Define o cabealho da coluna Usa caixas de seleo para primeira coluna Usa botes de seleo para primeira coluna Define qualquer caractere separador de sada (Exemplo , : - ; |/) Permite a seleo de mltiplas linhas Permite alteraes no texto Imprime uma coluna especfica (O padro 1. 'ALL' pode ser usado para imprimir todas as colunas) Esconde uma coluna especfica
interface_grafica_usuario
Exemplo 2: $ zenity --list --text="Listagem" --radiolist --column="Escolha" --column="Sexo" FALSE Masculino FALSE Feminino
Exemplo 3: $ find /etc/ -name *.conf | zenity --list --title "Procurando arquivos" --text "Localizando arquivos .conf" --multiple
--column "Arquivos"
10
interface_grafica_usuario
Opes de notificao (--notification): Opo --notification --text=TEXTO --listen Exemplo: $ zenity --notification --text="Mensagem de notifcao..." Descrio Exibe notificao Define o texto da notificao Espera por comandos em stdin (entrada)
Opes de barra de progresso (--progress): Opo --text=TEXTO Descrio Define o texto do dilogo
--percentage=PORCENTAGEM Define percentagem inicial --pulsate --auto-close --auto-kill Exemplo 1: Pulsa a barra de progresso Fechar o dilogo quando atingir 100% Mata o processo principal se a tecla cancelar for pressionada
11
interface_grafica_usuario
Opes de perguntas (--question): Opo --text=TEXTO --no-wrap Exemplo : $ zenity --question --text="Deseja prosseguir ?" Descrio Define o texto do dilogo No habilita quebra de linha no texto
12
interface_grafica_usuario
--filename=NOMEDOARQUIVO Abre um arquivo --editable Exemplo : $ zenity --text-info --filename=arquivo --editable Permite alteraes no texto
Opes de aviso (--warning): Opo --text=TEXTO --no-wrap Exemplo : Descrio Define o texto do dilogo No habilita quebra de linha no texto
13
interface_grafica_usuario
Opes de escala (--scale): Opo --text=TEXTO --value=VALOR --min-value=VALOR --max-value=VALOR --step=VALOR --print-partial --hide-value Exemplo : $ zenity --scale --text="Texto" --value=10 --min-value=0 --max-value=100 Descrio Define o texto do dilogo Define o valor inicial Define o valor mnimo Define o valor mximo Define o tamanho de cada passo Imprime valores parciais Esconde o valor
14
interface_grafica_usuario
No exemplo abaixo, criado um script onde solicitado o nome do usurio e armazenado na varivel $NOME e feito uma pergunta para o usurio se deseja criar o arquivo com seu nome /tmp/$NOME.txt, caso escolha sim, armazenado o valor 0 na varivel $SEL e o arquivo criado, caso contrrio a operao cancelada e o valor 1 armazenado na varivel $SEL. $ nano script1
#!/bin/bash NOME=`zenity --entry --text="Digite seu nome:"` zenity --question --text="Deseja criar o arquivo /tmp/$NOME.txt ?" SEL=$? case $SEL in 0) touch /tmp/$NOME.txt ; zenity --info --text="Arquivo criado $NOME.txt" ; ls -l /tmp/$NOME.txt ;; 1) zenity --warning --text="Operao cancelada" ;; esac
Executando o script $ chmod +x script1 $ ./script1 Criando um caixa de dilogo com menu grfico $ nano menus1
#!/bin/bash # script com menus grficos while true do clear OPCAO=`zenity --list --text="Script com menus" --width=400 --height=300 --radiolist --column="Escolha" --column="Escolha a ao" FALSE "Localizar todos arquivos *.conf em /etc" FALSE "Abrir Arquivos" FALSE "Exibir Calendrio" FALSE "Abrir navegador Firefox" FALSE SAIR`
case $OPCAO in "Localizar todos arquivos *.conf em /etc") find /etc -name *.conf | zenity --progress --pulsate; echo "Pressione uma tecla" ; read ;; "Abrir Arquivos") zenity --file-selection --multiple ; echo "Pressione uma tecla..." ; read ;; "Exibir Calendrio") zenity --calendar ; echo "Pressione uma tecla..." ; read ;; "Abrir navegador Firefox") firefox ;; SAIR) exit 0 ;; *) echo "Ateno!!! Por favor selecione uma das opes" ; echo "Pressione uma tecla..." ; read ;; esac
15
interface_grafica_usuario
done
Abaixo segue a descrio dos comandos do programa na tabela: Comandos Explicao Inicia o loop infinito, e somente finalizado quando for escolhido a opo 5 (Sair) no menu Inicia o loop Limpa a tela toda vez que escolhido uma opo do menu Mostra os itens do menu Executa a ao apropriada de acordo com o item escolhido no menu, e quando clicar em Cancelar ou no e s c o l h e r nenhuma opo, exibido uma mensagem de erro, onde ser solicitado para o usurio escolher uma das opes Encerra o loop, se o item 5 (Sair) do menu for escolhido
while true
do
clear
OPCAO=`zenity --list --text="Script com menus" --width=400 --height=300 --radiolist --column="Escolha" --column="Escolha a ao" FALSE "Localizar todos arquivos *.conf em /etc" FALSE "Abrir Arquivos" FALSE "Exibir Calendrio" FALSE "Abrir navegador Firefox" FALSE SAIR`
case $OPCAO in
"Localizar todos arquivos *.conf em /etc") find /etc -name *.conf | zenity --progress --pulsate; "Pressione echo uma tecla" ; read ;; "Abrir Arquivos") zenity --file-selection --multiple ; echo "Pressione uma tecla..." ; read ;; "Exibir Calendrio") zenity --calendar ; echo "Pressione uma tecla..." ; read ;; "Abrir navegador Firefox") firefox ;; SAIR) exit 0 ;; *) echo "Ateno!!! Por favor selecione uma das opes " ; echo "Pressione uma tecla..." ; read ;; esac
done
16
interface_grafica_usuario
$ ./menus
17