Concevoir des interfaces graphiques simples avec dialog/Xdialog

Linux Gazette n^{∘}101 — Avril 2004

Augusto Pereira

Dorian Musso - Traduction françaiseJoëlle Cornavin - Relecture de la traduction française

Copyright © 2004 Sunil Thomas Thonikuzhiyil Copyright © 2004 Dorian Musso Copyright © 2004 Joëlle Cornavin

Ce texte peut être distribué selon les termes de l’Open Publication License http://www.linuxgazette.com/copying.html. Paru dans le n^{∘}101 de la Linux Gazette d’avril 2004.

Table des matières

1. Introduction ............................................................................................................................................1
2. Les bases .................................................................................................................................................2
3. Lire une entrée .......................................................................................................................................3
4. Construire un menu ...............................................................................................................................4
5. Liste radio et liste à choix multiples .....................................................................................................4
6. Construire une barre d’avancement ....................................................................................................5
7. Sélections de fichiers ..............................................................................................................................5
8. Calendriers et horloges ..........................................................................................................................5
8.1. Calendrier....................................................................................................................................5
8.2. L’horloge.....................................................................................................................................6
9. Autres possibilités ..................................................................................................................................6
10. Astuces ..................................................................................................................................................6
11. Références .............................................................................................................................................6

1. Introduction

Cet article présente dialog et Xdialog pour construire des interfaces graphiques aux scripts shell. Il suppose que vous connaissez la programmation shell. La dernière version de ce document se trouve ici (http://gnubox.dyndns.org:8080/~sunil/dialog.php). dialog est un utilitaire permettant de construire des interfaces graphiques basées sur la console. Xdialog est l’équivalent pour X. Les deux programmes sont plus ou moins compatibles et faciles à programmer. dialog est présent dans la plupart des distributions GNU/Linux. Si vous souhaitez le compiler depuis les sources, procurez-vous une archive tar ici (http://hightek.org/dialog/). Xdialog est disponible ici (http://xdialog.dyns.net/). Ces deux programmes sont des logiciels libres et tournent sur de nombreuses plates-formes *nix. La plupart des exemples donnés dans ce tutoriel sont adaptés d’exemples fournis avec les sources de dialog.

2. Les bases

Voici le premier script dialog que j’ai essayé. Il affiche une simple fenêtre OUI/NON. Copiez les lignes ci-dessus dans un fichier, par exemple ouinon.sh et rendez-le exécutable :

$chmod u+x ouinon.sh

Essayez maintenant de lancer le programme :

$./ouinon.sh

Une copie d’écran du résultat est présentée ci-dessous^{1} :

À présent, changez la ligne

DIALOG=${DIALOG=dialog}

en

DIALOG=${DIALOG=Xdialog}

Essayez de lancer le programme à partir d’un terminal X. Voici ce que vous obtenez :

Observons de plus près le programme ci-dessus. La première ligne est simplement un commentaire qui indique en outre que le shell bash est utilisé pour exécuter ce programme :

DIALOG=${DIALOG=dialog}

La ligne ci-dessus affecte la valeur dialog à la variable DIALOG. La véritable fenêtre dialog est dessinée par la ligne suivante :

Les options utilisées sont :

• --title : cette option définit le titre de votre fenêtre ;

• --clear : cette option efface l’écran avant de dessiner ;

• --yesno : cette option dessine la fenêtre avec le texte indiqué à l’intérieur de la fenêtre.

Le texte à afficher dans la fenêtre oui/non est indiqué entre guillemets. Le texte s’étend en fonction de la largeur de la fenêtre ; faites appel à \n pour forcer un saut de ligne. Les deux derniers nombres spécifient la largeur et la hauteur de la fenêtre. Pour vous déplacer entre oui et non, utilisez la touche Tab.

Le programme dialog attend maintenant une entrée utilisateur. Quand vous appuyez sur Entrée sur oui ou non, ou si vous appuyez sur la touche Echap, le programme se termine et la valeur de retour est disponible dans la variable shell $? que vous pouvez traiter par la suite.

3. Lire une entrée

Le programme suivant lit une chaîne de caractères que vous entrez et la réaffiche.

Essayez de lancer le programme dans la console et sous X (après avoir changé dialog en Xdialog comme précédemment). Admirez le résultat :

Ce programme est un peu plus complexe que notre précédent programme de fenêtre oui/non. Les lignes suivantes créent un fichier temporaire :

La première ligne ci-dessus essaie de créer un fichier temporaire à l’aide de l’utilitaire tempfile. Si ce dernier échoue, un fichier temporaire est configué manuellement dans /tmp. La seconde ligne met en place une routine d’interception. Quand le script se termine (sur erreur ou non), la commande trap supprime le fichier temporaire. Les nombres affichés sont les signaux qui seront interceptés.

dialog est alors lancé comme suit :

Le programme dialog écrit sa sortie sur la sortie d’erreur standard par défaut. Par conséquent, la chaîne d’entrée que vous saisissez est envoyée vers la sortie d’erreur standard que nous redirigeons vers notre fichier temporaire. Vous pourrez reprendre le texte saisi dans le fichier temporaire pour le traiter ultérieurement.

4. Construire un menu

Essayez le programme suivant à la fois dans une console et sous X (après avoir changé dialog en Xdialog comme précédemment) :

Voici le résultat (en mode console) :

Et en mode graphique :

La logique est exactement la même que pour la fenêtre d’entrée. Nous redirigeons le choix que vous avez fait vers un fichier temporaire, puis nous traitons la valeur de retour de dialog et le contenu du fichier temporaire.

5. Liste radio et liste à choix multiples

Les listes radio et les listes à choix multiples peuvent être programmées exactement comme des menus. Un exemple de liste radio simple est donné ci-dessous.

Voici le résultat :

Pour créer des listes à choix multiples, changez simplement l’option --radiolist en --checklist.

6. Construire une barre d’avancement

Une barre d’avancement basée sur dialog peut servir à indiquer la progression du chargement de votre programme. La construction d’une barre d’avancement n’est pas évidente. Jetez un coup d’½il à l’exemple suivant :

Ici, le programme dialog prend son entrée dans le code affiché entre parenthèses. Ce code donne le nombre à utiliser pour la barre d’avancement et le message à afficher. Le message à afficher dans la fenêtre de progression doit être entouré par echo "XXX". Voici la copie d’écran d’une barre d’avancement :

7. Sélections de fichiers

Voici le code typique d’une fenêtre dialog de sélection de fichiers :

Voici le résultat :

Notez que le programme ci-dessus utilise une technique différente pour reperndre le fichier sélectionné. Comme mentionné précédemment, toutes les sorties de dialog sont envoyées par défaut sur la sortie d’erreur standard par défaut. Toutefois, l’option --stdout permet d’envoyer les informations de sortie à la sortie standard qui à son tour peut être affectée à une variable. Cette astuce peut également servir dans d’autres fenêtres dialog comme les menus, les fenêtres oui/non, etc.

8. Calendriers et horloges

8.1. Calendrier

Une fenêtre calendrier affiche le jour, le mois et l’année dans des fenêtres ajustables séparément. Si la valeur du jour du mois ou de l’année est absente ou négative, les valeurs actuelles correspondantes sont employées. Vous pouvez augmenter ou diminuer n’importe laquelle de ces valeurs à l’aide des touches Gauche, Haut, Droite et Bas. Utilisez les touches h, j, k et l dans le style vi pour vous déplacer dans la zone des jours du mois. Faites appel à la touche Tab ou Retour pour vous déplacer d’un champ à l’autre. Si l’année est mise à zéro, la date actuelle est prise comme valeur initiale. En quittant, la date est affichée sous la forme jour/mois/année.

Voici le résultat :

8.2. L’horloge

La fenêtre horloge de dialog vous permet de choisir une heure. Essayez le programme suivant et observez comment il fonctionne :

Et le résultat :

9. Autres possibilités

Xdialog offre quelques fonctionnalités supplémentaires : vues arborescentes, fenêtres d’échelles, d’édition, etc. Regardez ici (http://thgodef.nerim.net/xdialog/doc/box.html). La page de manuel de dialog contient des informations intéressantes sur d’autres composants de dialog, comme les fenêtres de mots de passe, de fin de texte, etc. On y trouve également des options pour changer les couleurs, les ombres, etc.

10. Astuces

Vous pouvez choisir entre dialog et Xdialog au démarrage avec le fragment de code suivant :

Testez ce programme sur une console ainsi que sous X et observez la différence :

11. Références

1. La page de manuel de dialog (http://www.delafond.org/traducmanfr/man/man1/dialog.1.html) : à lire absolument si vous comptez écrire quelques scripts dialog utiles. Il y a plusieurs autres options qui vous permettent de modifier l’apparence des fenêtres.

2. Des exemples à propos de dialog sur http://www.fifi.org/doc/dialog/examples/ : tous les exemples de ce tutoriel sont des versions modifiées d’exemples de cette page. Si vous avez une distribution Debian, d’autres exemples sont disponibles dans /usr/share/doc/dialog/examples.

3. La page dialog de Linux Focus (http://www.linuxfocus.org/Francais/November2002/article267.shtml).

4. La page de Xavier Garreau (http://www.xgarreau.org/techelp/cg/langtk/bash_dialog.php).

5. De la documentation sur Xdialog sur http://thgodef.nerim.net/xdialog/doc/index.html : cette page contient des informations exhaustives sur Xdialog.

Je travaille comme consultant en technologie de l’information à l’assemblée législative du Kerala à Trivandrum, en Inde. Je suis passionné par Linux depuis 1996. Titulaire d’un mastère d’informatique de l’université de Cochin, je m’intéresse à tous les systèmes d’exploitation. Pendant mon temps libre, j’aime écouter de la musique classique indienne.

Notes

1. Contrairement à Xdialog, dialog n’a pas été traduit en français ; c’est pourquoi vous verrez les fenêtres dialog en anglais (N.d.T.)