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
200 changes: 89 additions & 111 deletions 15-Interface gráfica/README.md
Original file line number Diff line number Diff line change
@@ -1,147 +1,125 @@
# Interface gráfica no shell script usando o zenity
# Interface gráfica no shell script usando o Yad

* 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.

* Para criar um tipo de interface gráfica em nossos scripts shell utilizaremos o yad que é uma ferramenta disponível no shell script do Linux que permite a criação de caixas de diálogo gráficas interativas. Ela pode ser usada para exibir informações, receber entrada do usuário e executar ações com base nas escolhas feitas.
* O yad diferente do zenity (outra ferramenta de interface gráfica muito utilizada no linux) não vem instalado por padrão nos sistemas linux, então para instalar usaremos o seguinte comando:
sudo apt install yad
* caso queira verificar se o yad já foi instalado no linux, podemos digitar yad --version ou whereis yad.


* 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"
* A estrutura das possíveis caixas de diálogo do yad é simples, é baseada apenas em:
> yad "tipo de diálogo" "opções específicas do diálogo"


### Alguns Tipos de caixa de diálogo e opções específicas, para ver todos os tipos acessar o link do campo "Referências":

### 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.
* 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.
* --date-format=PATTERN: Defina o formato para a data retornada.

### 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.
* **--text**
* Opções de seleção de formulário
* Opções específicas:
* --text-info : Exibir diálogo de texto informativo
* --fore=COR : Usar cor específica para o texto
* --back=COR : Use cor específica no fundo
* --wrap : Ativar quebra de texto
* --justify=TIPO : Definir justificação (left, right, center ou fill)

### 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 "|".
* **--entry**
* Caixa de diálogo para inserir textos.
* Opções específicas:
* --entry-label=STRING: Defina o texto que aparecerá antes da caixa de input.
* --entry-text=STRING : Define o texto de entrada inicial ou texto padrão da caixa de combinação.
* --hide-text : Oculte o texto de entrada
* --numeric : Caixa de entrada de dados com botão de rotação em vez da entrada de texto


* **--file**
* Seleção de arquivos.
* Opções específicas:
* --filename=Nome_do_arquivo : O nome do arquivo definido aparecerá selecionado
* --file-selection : Alias para --file
* --multiple : Permite a seleção de vários arquivos
* --directory : Selecionar somente diretório
* --file-filter="*.txt" : Mostra somente os arquivos que baterem com o filtro especificado
* **--form**
* Opções de formulário
* Opções específicas:
* --field="rótulo:tipo:opções" : Define um campo no formulário. O rótulo é o texto exibido ao lado do campo, o tipo especifica o tipo de campo (como text, password, file, etc.), e as opções são usadas para personalizar o campo
* --field-separator="Separador" : Define o separador entre os campos no formulário. Por padrão, o separador é um espaço em branco,
* --align=Tipo : Defina o alinhamento dos rótulos de campo (left, center ou right)
* --columns=Número : Defina o número de colunas no formulário
* --scroll : Fazer um formulário com rolagem

* 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
* **--font**
* Opções de seleção de font
* Opções específicas:
* --fontname=FONTNAME : Define a fonte do texto
* --preview=TEXTO : Definir sequência de texto para visualização
* --separate-output : Saída separada da descrição da fonte

* 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/
* **--list**
* Opções de seleção de formulário
* Opções específicas:
* --column="rótulo" : Adiciona uma coluna com o rótulo especificado à lista. Você pode adicionar várias colunas, separando-as por vírgulas.
* --text="texto": Define o texto a ser exibido acima da lista.
* --separator="separador": Define o separador entre as colunas da lista. O padrão é uma guia. Por exemplo:
* --print-column=N: Define o índice da coluna cujo valor será retornado ao selecionar uma opção. O valor será impresso na saída padrão. O índice da coluna começa em 1.

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

https://help.gnome.org/users/zenity/stable/scale.html.uk
### Código de saída
* O yad gera códigos de saída de acordo com o clique do usuário, cada clique representa um código, são eles:

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

https://help.gnome.org/users/zenity/stable/forms.html.sl
* 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 70: O diálogo foi fechado porque o tempo foi esgotado;
* Código de saída 252:A caixa de diálogo foi fechada pressionando Esc ou usando as funções da janela para fechar a caixa de diálogo.

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

https://help.gnome.org/users/zenity/stable/password.html.en
### 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)
* --text-align=TYPE (Defina o tipo de justificação do texto da caixa de diálogo. TYPE pode ser esquerdo , direito , centralizado ou preenchido.)
* --image=IMAGE (Defina a imagem da caixa de diálogo que aparece no lado esquerdo do texto da caixa de diálogo. IMAGE pode ser o nome do arquivo ou o nome do ícone do tema do ícone atual.)

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

https://help.gnome.org/users/zenity/stable/calendar.html.en
## Exemplos
* Os comandos do yad podem ser executados na própria linha de comando, você pode utilizar isto para realizar os seus testes.

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

https://help.gnome.org/users/zenity/stable/message.html.en
* Para criar um formulário e adicionar o nome e o número de um determinado usuário como entrada, basta utilizar o comando:
> yad --form --title="Informações do usuário" --field="Nome:text" --field="Idade:num" --field="Comida favorita?:text" --field-separator="-"
* Lembrando: O --field="Nome:text" é respectivamente a mensagem que irá aparecer na tela e o tipo, que nesse caso é text e 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 "|"

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

https://help.gnome.org/users/zenity/stable/question.html.en
* Lista de alunos e cursos do IFPB
> yad --list --title="Alunos-cursos do IFPB" --column="Aluno" --column="Curso" --separator="," Mariana "Redes de computadores" Pedro Administração Paulo "Engenharia de software" Ana "Redes de computadores"

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

## Referências


https://man.archlinux.org/man/extra/yad/yad.1.en
http://www.dicas-l.com.br/arquivo/yad_yet_another_dialog.php
18 changes: 0 additions & 18 deletions 15-Interface gráfica/exemplos/armazenando-data.sh

This file was deleted.

15 changes: 0 additions & 15 deletions 15-Interface gráfica/exemplos/arquivo.sh

This file was deleted.

14 changes: 14 additions & 0 deletions 15-Interface gráfica/exemplos/filtrar-arq.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/bin/bash
#Exemplo de como filtrar a seleção de um arquivo no yad

file=$(yad --title="Selecione o arquivo desejado" --file --file-filter="*.txt")

case $? in
0)
linhas=$(cat $file | wc -l)
yad --text "O arquivo:$file possui $linhas linhas. "
;;
1)
yad --text "Programa encerrado!"
;;
esac
23 changes: 23 additions & 0 deletions 15-Interface gráfica/exemplos/form-curso.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#!/bin/bash
#Exemplo de form com yad

opc=$(yad --form --title "Exemplo de form" \
--text "Informe seus dados referentes ao seu curso" \
--field "Informe seu nome completo:text" \
--field "Escolha o seu curso:CB" \
--field "Em qual período vc está?:NUM" \
--field "Selecione o seu currículo:FL" \
"" \
'Redes de Computadores!Sistema para Internet!Engenharia elétrica!Administração' \
)


case $? in
0)
usuario=$(echo "$opc" | cut -d "|" -f1)
yad --text "Suas informações foram salvas $usuario!"
;;
1)
yad --text "Formulário encerrado!"
;;
esac
21 changes: 0 additions & 21 deletions 15-Interface gráfica/exemplos/forms.sh

This file was deleted.

18 changes: 0 additions & 18 deletions 15-Interface gráfica/exemplos/login.sh

This file was deleted.