From afe6cfd373a3774721b98995740c3e954f709721 Mon Sep 17 00:00:00 2001 From: brunoravi25 <71047095+brunoravi25@users.noreply.github.com> Date: Tue, 7 Dec 2021 16:15:55 -0300 Subject: [PATCH 1/5] =?UTF-8?q?Novo=20t=C3=B3pico:=20Interface=20gr=C3=A1f?= =?UTF-8?q?ica=20usando=20o=20Zenity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "15-Interface gr\303\241fica/README.md" | 147 ++++++++++++++++++ .../exemplos/armazenando-data.sh" | 18 +++ .../exemplos/arquivo.sh" | 15 ++ .../exemplos/forms.sh" | 21 +++ .../exemplos/login.sh" | 18 +++ .../exerc\303\255cios/arquivos.md" | 1 + .../exerc\303\255cios/forms.md" | 1 + .../exerc\303\255cios/usuarios.md" | 4 + 8 files changed, 225 insertions(+) create mode 100644 "15-Interface gr\303\241fica/README.md" create mode 100644 "15-Interface gr\303\241fica/exemplos/armazenando-data.sh" create mode 100644 "15-Interface gr\303\241fica/exemplos/arquivo.sh" create mode 100644 "15-Interface gr\303\241fica/exemplos/forms.sh" create mode 100644 "15-Interface gr\303\241fica/exemplos/login.sh" create mode 100644 "15-Interface gr\303\241fica/exerc\303\255cios/arquivos.md" create mode 100644 "15-Interface gr\303\241fica/exerc\303\255cios/forms.md" create mode 100644 "15-Interface gr\303\241fica/exerc\303\255cios/usuarios.md" diff --git "a/15-Interface gr\303\241fica/README.md" "b/15-Interface gr\303\241fica/README.md" new file mode 100644 index 0000000..9d350f6 --- /dev/null +++ "b/15-Interface gr\303\241fica/README.md" @@ -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-icon** + * 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 inicia; + * --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" ou "Fechar"; + * Código de saída 1: O usuário clico 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 isso para realizar os seus testes. + +* Para criar um formulário e adicionar o nome e o número de um determinado usuário 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á optar pelas opções, 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 diff --git "a/15-Interface gr\303\241fica/exemplos/armazenando-data.sh" "b/15-Interface gr\303\241fica/exemplos/armazenando-data.sh" new file mode 100644 index 0000000..467d00e --- /dev/null +++ "b/15-Interface gr\303\241fica/exemplos/armazenando-data.sh" @@ -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 diff --git "a/15-Interface gr\303\241fica/exemplos/arquivo.sh" "b/15-Interface gr\303\241fica/exemplos/arquivo.sh" new file mode 100644 index 0000000..95dc329 --- /dev/null +++ "b/15-Interface gr\303\241fica/exemplos/arquivo.sh" @@ -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 diff --git "a/15-Interface gr\303\241fica/exemplos/forms.sh" "b/15-Interface gr\303\241fica/exemplos/forms.sh" new file mode 100644 index 0000000..d2e8747 --- /dev/null +++ "b/15-Interface gr\303\241fica/exemplos/forms.sh" @@ -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 \ No newline at end of file diff --git "a/15-Interface gr\303\241fica/exemplos/login.sh" "b/15-Interface gr\303\241fica/exemplos/login.sh" new file mode 100644 index 0000000..a541c10 --- /dev/null +++ "b/15-Interface gr\303\241fica/exemplos/login.sh" @@ -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 + + diff --git "a/15-Interface gr\303\241fica/exerc\303\255cios/arquivos.md" "b/15-Interface gr\303\241fica/exerc\303\255cios/arquivos.md" new file mode 100644 index 0000000..8d8e673 --- /dev/null +++ "b/15-Interface gr\303\241fica/exerc\303\255cios/arquivos.md" @@ -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. \ No newline at end of file diff --git "a/15-Interface gr\303\241fica/exerc\303\255cios/forms.md" "b/15-Interface gr\303\241fica/exerc\303\255cios/forms.md" new file mode 100644 index 0000000..8fa3ba0 --- /dev/null +++ "b/15-Interface gr\303\241fica/exerc\303\255cios/forms.md" @@ -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. \ No newline at end of file diff --git "a/15-Interface gr\303\241fica/exerc\303\255cios/usuarios.md" "b/15-Interface gr\303\241fica/exerc\303\255cios/usuarios.md" new file mode 100644 index 0000000..b1379c0 --- /dev/null +++ "b/15-Interface gr\303\241fica/exerc\303\255cios/usuarios.md" @@ -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. \ No newline at end of file From 415cee5f81caa5f8ec8944c54f77a51cf77abd44 Mon Sep 17 00:00:00 2001 From: brunoravi25 <71047095+brunoravi25@users.noreply.github.com> Date: Tue, 7 Dec 2021 16:18:35 -0300 Subject: [PATCH 2/5] Update README.md --- "15-Interface gr\303\241fica/README.md" | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git "a/15-Interface gr\303\241fica/README.md" "b/15-Interface gr\303\241fica/README.md" index 9d350f6..2f109b0 100644 --- "a/15-Interface gr\303\241fica/README.md" +++ "b/15-Interface gr\303\241fica/README.md" @@ -21,10 +21,10 @@ * **--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; + * --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: From 9a5e2bcbefe8651149a8b2302c8804c9f2485d80 Mon Sep 17 00:00:00 2001 From: brunoravi25 <71047095+brunoravi25@users.noreply.github.com> Date: Tue, 7 Dec 2021 16:21:36 -0300 Subject: [PATCH 3/5] Update README.md --- "15-Interface gr\303\241fica/README.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/15-Interface gr\303\241fica/README.md" "b/15-Interface gr\303\241fica/README.md" index 2f109b0..bc453ec 100644 --- "a/15-Interface gr\303\241fica/README.md" +++ "b/15-Interface gr\303\241fica/README.md" @@ -37,7 +37,7 @@ * 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-icon** +* **--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"; From 6c41fd9caec22cab5c99c715cb023c068b62345d Mon Sep 17 00:00:00 2001 From: brunoravi25 <71047095+brunoravi25@users.noreply.github.com> Date: Tue, 7 Dec 2021 16:23:18 -0300 Subject: [PATCH 4/5] Update README.md --- "15-Interface gr\303\241fica/README.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/15-Interface gr\303\241fica/README.md" "b/15-Interface gr\303\241fica/README.md" index bc453ec..2b5d210 100644 --- "a/15-Interface gr\303\241fica/README.md" +++ "b/15-Interface gr\303\241fica/README.md" @@ -72,7 +72,7 @@ * **--color-selection** * Possibilita a seleção de uma cor para o usuário. * Opções específicas: - * --color="Valor": Setar o valor da cor inicia; + * --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. From 2f9f28a284a460fb185b17f857aebce0bb1d66a6 Mon Sep 17 00:00:00 2001 From: brunoravi25 <71047095+brunoravi25@users.noreply.github.com> Date: Tue, 7 Dec 2021 16:31:56 -0300 Subject: [PATCH 5/5] Update README.md --- "15-Interface gr\303\241fica/README.md" | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git "a/15-Interface gr\303\241fica/README.md" "b/15-Interface gr\303\241fica/README.md" index 2b5d210..c72ab24 100644 --- "a/15-Interface gr\303\241fica/README.md" +++ "b/15-Interface gr\303\241fica/README.md" @@ -79,8 +79,8 @@ ### 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" ou "Fechar"; - * Código de saída 1: O usuário clico em "Cancelar" ou usou a janela para fechar o diálogo; + * 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. @@ -93,16 +93,16 @@ * --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 isso para realizar os seus testes. +* 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 basta utilizar o comando: +* 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á optar pelas opções, podemos usar o comando: +* 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