diff --git "a/15-Interface gr\303\241fica/README.md" "b/15-Interface gr\303\241fica/README.md" index c72ab24..8c1918b 100644 --- "a/15-Interface gr\303\241fica/README.md" +++ "b/15-Interface gr\303\241fica/README.md" @@ -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 diff --git "a/15-Interface gr\303\241fica/exemplos/armazenando-data.sh" "b/15-Interface gr\303\241fica/exemplos/armazenando-data.sh" deleted file mode 100644 index 467d00e..0000000 --- "a/15-Interface gr\303\241fica/exemplos/armazenando-data.sh" +++ /dev/null @@ -1,18 +0,0 @@ -#!/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" deleted file mode 100644 index 95dc329..0000000 --- "a/15-Interface gr\303\241fica/exemplos/arquivo.sh" +++ /dev/null @@ -1,15 +0,0 @@ -#!/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/filtrar-arq.sh" "b/15-Interface gr\303\241fica/exemplos/filtrar-arq.sh" new file mode 100755 index 0000000..6e36f0b --- /dev/null +++ "b/15-Interface gr\303\241fica/exemplos/filtrar-arq.sh" @@ -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 diff --git "a/15-Interface gr\303\241fica/exemplos/form-curso.sh" "b/15-Interface gr\303\241fica/exemplos/form-curso.sh" new file mode 100755 index 0000000..b535eb3 --- /dev/null +++ "b/15-Interface gr\303\241fica/exemplos/form-curso.sh" @@ -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 diff --git "a/15-Interface gr\303\241fica/exemplos/forms.sh" "b/15-Interface gr\303\241fica/exemplos/forms.sh" deleted file mode 100644 index d2e8747..0000000 --- "a/15-Interface gr\303\241fica/exemplos/forms.sh" +++ /dev/null @@ -1,21 +0,0 @@ -#!/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" deleted file mode 100644 index a541c10..0000000 --- "a/15-Interface gr\303\241fica/exemplos/login.sh" +++ /dev/null @@ -1,18 +0,0 @@ -#!/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 - -