Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
147 changes: 147 additions & 0 deletions 15-Interface gráfica/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
# Interface gráfica no shell script usando o zenity

* Para criar um tipo de interface gráfica em nossos scripts shell utilizaremos o Zenity que é um software que já vem instalado em grande parte dos sistemas linux.
* Para saber se o seu sistema possui o zenity basta digitar o comando: whereis zenity.
* Caso o seu sistema não possua o zenity, basta emitir o comando: sudo apt-get install zenity.


* Sintaxe

* A estrutura das possíveis caixas de diálogo do Zenity é simples, é baseada apenas em:
> Zenity "tipo de diálogo" "opções comuns" "opções específicas do diálogo"

### Tipos de caixa de diálogo e opções específicas:

* **--calendar**
* Retorna a data escolhida.
* Opções específicas:
* --day="Dia": Especifica o dia que estará selecionado por padrão no calendário;
* --month="Mês": Especifica o mês que estará selecionado por padrão no calendário;
* --year="Ano": Especifica o ano que estará selecionado por padrão no calendário.
* **--file-selection**
* Nessa caixa de diálogo o usuário poderá selecionar arquivos de um determinado diretórios.
* Opções específicas:
* --multiple: Possibilita a seleção de vários arquivos na caixa de diálogo;
* --directory: Possibilita APENAS a seleção de diretórios na caixa de diálogo
* --file-filter="filtro": Possibilita realizar um filtro dos arquivos que irão aparecer na caixa de diálogo;
* --filename="NOME": Mostra o nome do arquivo a ser selecionado na caixa de diálogo;
* **--forms**
* Cria um formulário.
* Opções específicas:
* --add-entry="Nome do campo": Cria um tipo de 'input' no formulário;
* --add-password="Nome do campo": Cria um input para senhas no formulário;
* --add-calendar="Nome do campo": Cria um input de calendário no formulário;
* --separator="Separador na saída": Cria um separador para a saída do formulário, por exemplo: Se o separador for "," e forem criadas as entradas "Nome" e "Senha" a saída será: "nome", "senha" e assim por diante.
* **--list**
* Cria uma lista de opções que podem ser selecionadas pelo usuário.
* Opções específicas:
* --column="Nome da coluna": Cria uma nova coluna para a lista
* --print-column="Número da coluna": Especifica qual coluna será retornada, por padrão APENAS a coluna 1 é retornada, pode ser utilizado o "ALL" para que sejam retornadas todas as colunas.
* **--notification**
* Literalmente apenas um ícone de notificação, sem áreas clicáveis.
* Message (que é dividida em: Error, Information, Question e Warning)
* As mensagens --erro, --informação e --warning darão apenas a opção "OK";
* A messagem --question criará sempre as opções "Sim" ou "Não"
* **--password**
* Pode ser usada com a opção específica: --username.
* Irá retornar o usuário e a senha separados por: "|"
* **--progress**
* Apresenta o progresso referente à algo.
* Opções específicas:
* --percentage='valor': Valor onde o progesso irá iniciar;
* --auto-close: O progresso será fechado quando chegar em 100%.
* **--text-entry**
* Caixa de diálogo para inserir textos.
* Opções específicas:
* --text="Texto ou pergunta"
* --entry-text="Texto de exemplo na caixa criada"
* **--text-information**
* Cria um texto com informações, como por exemplo um texto de 'aceitação de termos'.
* Opções específicas:
* --checkbox="Texto": Cria uma caixa de seleção;
* --font="Fonte": Especifica a fonte do texto;
* --filename="Nome do arquivo": Especifica o arquivo que será carregado e exibido
* OBS: Retornará o valor $?=0 caso o usuário clique no "checkbox" e após clique em "OK" e retornará o valor $?=1 caso o usuário clique em "Cancelar"

* **--scale**
* Cria uma escala onde o usuário pode optar por um valor dentro desta escala.
* Opções específicas:
* --min-value;
* --max-value;
* --value (Define o valor inicial)
* **--color-selection**
* Possibilita a seleção de uma cor para o usuário.
* Opções específicas:
* --color="Valor": Setar o valor da cor inicial;
* --show-palette: Mostra o palette de cores para o usuário selecionar.
* OBS: Será retornado o valor da cor em rgb.

### Código de saída
* O zenity gera códigos de saída de acordo com o clique do usuário, cada clique representa um código, são eles:

* Código de saída 0: O usuário clicou em "OK";
* Código de saída 1: O usuário clicou em "Cancelar" ou usou a janela para fechar o diálogo;
* Código de saída -1: Ocorreu um erro inesperado;
* Código de saída 5: O diálogo foi fechado porque o tempo foi esgotado.

### Opções comuns
* As opções comuns são as que irão editar a caixa de diálogo, são elas:
* --title="título desejado" (opção referente ao título da caixa de diálogo)
* --window-icon="caminho do ícone" (Altera o ícone exibido nas caixas de diálogo "info", "warning", "question" e "error"
* --widith="largura" (Largura da caixa de diálogo)
* --heigh="altura" (Altura da caixa de diálogo)
* --timeout="tempo" (Especifica o tempo em segundos em que a caixa de diálogos será fechada)

## Exemplos
* Os comandos do zenity podem ser executados na própria linha de comando, você pode utilizar isto para realizar os seus testes.

* Para criar um formulário e adicionar o nome e o número de um determinado usuário como entrada, basta utilizar o comando:

>zenity --forms --title="Novo usuário" --text="Adicione o nome e o número do novo usuário" --separator="," --add-entry="Nome" --add-entry="Número"
* Lembrando: Neste caso utilizamos o --separator="," para que a saída seja separada por vírgula, ou seja, a saída será: "Nome", "Número". Por padrão a saída é separada por "|".



* Para criar uma lista onde o usuário poderá escolher pelas opções mostradas, podemos usar o comando:

>Zenity --list --title="Lista de dispositivos" --column="Dispositivos" --column="Marca" --separator="," --print-column="ALL" Celular Samsung Desktop Positivo Notebook Samsung

* Isso irá criar uma lista com 2 colunas, são elas:

* "Dispositivos"
* "Marca",
* Serão inseridos nesta lista os dispositivos "Celular", "Desktop" e "Notebook" e as marcas inseridas são "Samsung" "Positivo" e "Samsung", os elementos são inseridos de forma sequencial, ou seja, insere o primeiro elemento no primeiro item da primeira coluna e o próximo elemento será inserido no primeiro item da segunda coluna e assim sucessivamente.


## Referências
http://www.bosontreinamentos.com.br/shell-script/zenity-exibindo-caixas-de-dialogo-com-scripts-do-shell-no-linux/

https://pt.linux-console.net/?p=808

https://help.gnome.org/users/zenity/stable/scale.html.uk

https://help.gnome.org/users/zenity/stable/progress.html.en

https://help.gnome.org/users/zenity/stable/forms.html.sl

https://help.gnome.org/users/zenity/stable/list.html.en

https://help.gnome.org/users/zenity/stable/password.html.en

https://help.gnome.org/users/zenity/stable/

https://help.gnome.org/users/zenity/stable/calendar.html.en

https://help.gnome.org/users/zenity/stable/notification.html.en

https://help.gnome.org/users/zenity/stable/message.html.en

https://help.gnome.org/users/zenity/stable/info.html.en

https://help.gnome.org/users/zenity/stable/question.html.en

https://help.gnome.org/users/zenity/stable/entry.html.en

https://help.gnome.org/users/zenity/stable/text.html.en

https://help.gnome.org/users/zenity/stable/color-selection.html.en
18 changes: 18 additions & 0 deletions 15-Interface gráfica/exemplos/armazenando-data.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/bin/bash
#Criando um script pedindo para o usuário inserir a data de nascimento dele através de um calendário.

calendario=$(zenity --calendar --title="Data de nascimento" --year="2000")

case $? in
0)
data_nascimento=$(echo $calendario)
;;

1)
echo "Programa encerrado!"
;;

-1)
echo "Erro desconhecido!"

esac
15 changes: 15 additions & 0 deletions 15-Interface gráfica/exemplos/arquivo.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash
#Criando um script e salvando numa variável o caminho do arquivo que o usuário selecionar

arquivo=$(Zenity --file-selection)

case $? in
0)
caminho=$(echo $arquivo)
;;
1)
echo "Programa encerrado!"
;;
-1)
echo "Erro inesperado!"
esac
21 changes: 21 additions & 0 deletions 15-Interface gráfica/exemplos/forms.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/bin/bash
#Criando um formulário para o usuário inserir seus dados: Nome, Telefone, CPF e data de nascimento e salvando cada uma dessas entradas em uma variável

forms=$(Zenity --forms --add-entry="Nome" --add-entry="Telefone" --add-entry="CPF" --add-calendar="Data de nascimento")

case $? in
0)
nome=$(echo $forms | cut -d '|' -f1)
telefone=$(echo $forms | cut -d '|' -f2)
cpf=$(echo $forms | cut -d '|' -f3')
data=$(echo $forms | cut -d '|' -f4)
;;

1)
echo "Programa encerrado!"
;;

-1)
echo "Erro inesperado!"

esac
18 changes: 18 additions & 0 deletions 15-Interface gráfica/exemplos/login.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/bin/bash
# Criando uma interface de login para o usuário e senha e salvando nas variáveis "usuário" e "senha"

interface=$`Zenity --password --title="Login" --username`

case $? in
0)
usuario=`echo $interface | cut -d '|' -f1
senha = `echo $interface | cut -d '|' -f2
;;
1)
echo "Login encerrado!"
;;
-1)
echo "Erro inesperado!"
esac


1 change: 1 addition & 0 deletions 15-Interface gráfica/exercícios/arquivos.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* Crie um script com interface gráfica que salve em uma variável o caminho de **MÚLTIPLOS** arquivos selecionados pelo usuário.
1 change: 1 addition & 0 deletions 15-Interface gráfica/exercícios/forms.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* Crie um script com interface gráfica com um formulário com as seguintes entradas: Nome, Sobrenome, Idade, Matrícula, CPF e Telefone.
4 changes: 4 additions & 0 deletions 15-Interface gráfica/exercícios/usuarios.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
* Crie um script com interface gráfica que peça para o usuário inserir o seu "usuário" e "senha" e salve o o usuário em uma variável e a senha em outra variável.


* Melhore o script para que quando o usuário insira o usuário e senha ele entre em um formulário que possua as seguintes entradas: Nome, Telefone, CPF e Data de nascimento.