web-dev-qa-db-fra.com

Comment créer facilement une boîte de dialogue graphique avec un script bash?

Je dois présenter du texte avec les éléments (environ 15 valeurs) pour chacun des deux enregistrements de la liste Bash (fichier). Sur le même écran, je dois présenter une sélection à trois voies (boutons, fenêtre de sélection avec défilement, etc.).

Je suis un scripteur Ubuntu (11.04) qui commence à peine à utiliser Zenity dans les scripts. Mes amis ont suggéré YAD.

Puis-je faire tout cela dans YAD ou utiliser un autre outil graphique simple inconnu de nous?

.

6
Harry

Voici une implémentation très minimale dans Yad.

Un fichier texte nommé 'mylist' dans le même répertoire que le script contient "1 2 3 4 5 6 7 8 9 10". Un caractère d'espacement est le séparateur par défaut pour la saisie dans les listes.

Le script d'exemple est:

#/bin/bash
thelist=$(<mylist)
thechoice=$(yad --title="Choose a value" --width=200 --height=200 --list --column="Values" --separator="" $thelist)
exit $(yad --title="You chose..." --text=$thechoice)

C'est ça. Le défilement de la liste est géré automatiquement. Le --separator="" doit supprimer le réglage par défaut de Yad, qui consiste à ajouter un caractère de canal ("|") à la sortie.

En lisant la page de manuel, vous verrez que vous avez un grand nombre de possibilités. Vous pouvez ajouter des boutons, des icônes, des boutons radio, etc. Vous pouvez créer des boîtes de dialogue à onglets en utilisant la fonctionnalité Bloc-notes de Yad pour incorporer des boîtes de dialogue dans d'autres boîtes de dialogue en tant que plug-ins.

Il y a un long exemple sur magazine PCLinusOS et quelques exemples intéressants plus courts sur site Yad .

2
chaskes

pour les dialogues simples, Yad ou kdialog sont en effet les plus caractéristiques. Cependant, une interface graphique complète pour bash ne peut être réalisée que par deux programmes que je connais:

gtkdialog ( https://code.google.com/p/gtkdialog ) vous donnera une interface complète pour les programmes simples et est probablement ce que vous recherchez en premier lieu si yad s'avère être ne suffit pas à vos besoins.

L'autre est gtkserver ( http://www.gtk-server.org ), qui est un serveur graphique distinct en cours d'exécution. Votre application bash peut communiquer avec elle au moyen de canaux, de messages ou de sockets TCP, ce qui est très pratique si vous prévoyez une configuration complexe de scripts/applications avec une seule interface centrale. Je pense que ce sera un peu exagéré pour votre projet actuel :-)

2
thom

Quelques exemples de Zenity, juste au cas où quelqu'un voudrait s'en tenir à cela.

Cela créera une boîte de message "Hello world":

zenity --info --text "Saluton mondo"

Cela créera une liste avec la sortie de ls:

ls /var/log | zenity --list --column="Files and directories"
1
Noe Nieto