Precisa de uma interface para um script de shell gui mais poderoso que o zenity

2

Eu quero escrever o arquivo de script de shell que tem uma GUI com várias caixas de entrada para entrada do usuário. Eu já tentei zenity . Qualquer idéia ou conselho seria apreciado.

    
por moata_u 20.03.2011 / 13:29

4 respostas

9

Yad pode ser útil a este respeito, é uma bifurcação de zenity com mais recursos, um deles a capacidade de criar formulários.

Aqui está um exemplo muito simples de um formulário:

#!/bin/bash


frmdata=$(yad --title "Test Form" --form --field "Address" --field="Name")


frmaddr=$(echo $frmdata | awk 'BEGIN {FS="|" } { print  }')
frmname=$(echo $frmdata | awk 'BEGIN {FS="|" } { print  }')

echo $frmaddr > test.txt
echo $frmname >> test.txt

O script acima exibirá um formulário como este:

Depois de inserir seus dados e clicar em OK ou pressionar Enter no teclado, os dados do formulário serão gravados em um arquivo de texto chamado test.txt. Estou usando o awk para separar os dados do formulário, que é uma string com um pipe. separador de campo, eu acredito que há uma maneira direta de obter os dados sem awk, mas eu não sou nenhum especialista em yad, por favor, verifique o projeto em casa e fazer perguntas, você pode encontrar uma maneira mais elegante.

Como obter e instalar o yad aqui:

link

yad project home:

link

mais exemplos aqui:

link

link

Estou atrasado aqui, mas isso ainda pode ser útil.

    
por Sabacon 01.12.2011 / 05:12
3

xDialog é algo semelhante, aqui está uma lista de pesquisa do freshmeat . O tcl / tk é outra ferramenta popular para esses trabalhos.

Uma solução ruim precisaria que o usuário preenchesse uma lista e, finalmente, marcasse todas as linhas:

zenity --list --text "Fill every row, and mark all rows before hitting 'OK'" --column "title" --print-column=2 --multiple --column "value" --editable "name" "(please override)" "host" "" "ip" ""

Eu admito que isso não é confortável.

    
por user unknown 20.03.2011 / 14:09
3

Minha resposta pode estar atrasada (dois anos atrasada, acho), mas como muitas pessoas ainda estão buscando a resposta para essa mesma pergunta, pode ser útil. Também procuro por uma solução "melhor que zenity / yad / xdialog" e encontrei dois programas muito bons:

  1. gtkdialog: link você pode construir uma interface de usuário completa para o bash que continua em execução enquanto se comunica com seu backendscript. Está em desenvolvimento ativo e também é usado por desenvolvedores de filhotes. sua própria linguagem glade-like é mais poderosa que a libglade, mas pode rodar o XML da libglade.

  2. gtkserver: link Este vai ainda mais longe e é executado como um co-processador enquanto se comunica com seu script bash via pipes, mensagens ou portas TCP. Ele não funciona com um arquivo de descrição digitado por XML, mas com comandos GTK que você chama a partir da linha de comando bash. Muito poderoso mesmo: -)

O gtkdialog não está mais nos repositórios, mas você pode finalizar as últimas versões em um PPA ( link )

O gtkserver não tem PPA ou deb AFAIK, portanto, isso deve ser compilado a partir da fonte.

    
por thom 16.03.2013 / 01:54
1

Uma solução seria usar o Zenity, mas apenas exibir cada prompt individualmente. O primeiro prompt seria para o primeiro campo e, quando o usuário clica em "Ok", você pode solicitar o segundo campo.

Parece que você está alcançando os limites do script e pode querer investigar o desenvolvimento de uma interface semelhante a um aplicativo usando algo como QT ou GTK.

    
por Windigo 20.03.2011 / 15:47