Table des matières

,

Zenity

Traduction de la courte description sur le site officiel de Zenity.1)

Zenity est un outil qui permet d'afficher des boîtes de dialogue GTK+ depuis la ligne de commandes ou au travers de scripts shell. Il est similaire à gdialog, mais son but est d'être plus simple. Il appartient à la même famille que dialog (affichage de pseudo-boîtes de dialogue en console), xdialog et cdialog.

Installation

Zenity est installé sur Ubuntu par défaut. Sinon, il suffit d'installer le paquet zenity.

Utilisation

Zenity permet d'afficher 14 types de fenêtre :

Type de fenêtre Argument Description
Calendrier --calendar Affiche un calendrier
Entrée --entry Permet la saisie de caractères
Erreur --error Affiche une erreur à l'écran
Navigateur de fichier --file-selection Permet la sélection d'un fichier
Info --info Affiche une information
Liste --list Affiche une liste
Notification --notification Afficher une notification dans la zone prévue à cet effet
Progress --progress Permet de visualiser le degré d'accomplissement d'une (suite de) tache(s)
à l'aide d'une barre de progression
Question --question Affiche une question ( OUI / NON )
Info texte --text-info Affiche un texte dans une fenêtre
Avertissement --warning Afficher un avertissement
Scale --scale Choisir une valeur numérique à l'aide d'un curseur
Formulaire --forms Affiche un formulaire (à partir de la version 3.2.0)
Mot de passe --password Demande un mot de passe (peut être utilisé avec 'sudo -S')
Temporisation --timeout Définit le délai d'expiration de la boîte de dialogue en secondes

Pour plus d'infos, consulter la (choisir sa version) >> page de manuel de Zenity.

Note de construction du tableau ci-dessus :
Afin d'insérer un saut de ligne dans une même cellule, il suffit d'utiliser la balise <espace>\\<espace> pour insérer un retour chariot dans une cellule.

Note sur Zenity :
Il existe un script qui facilite la création de fenêtres Zenity de façon rapide et simple.

Voir le logiciel zenitor 3. FIXME Cf le chapitre Documentation sur l'obsolescence de Zenitor 3. Problème Python concernant les sources de zenitor 3. Le script est disponible à la page « Zenitor 3 ou Zenity Generator 3 »

Exemples

Voici quelques infos bonus que certaines personnes ont trouvées. Car comme vous pouvez le constater, les infos sur Zenity ne sont pas légion…

Ces fonctions ne semblent pas fonctionner pour les fenêtres “entry”.

Zenity est basé sur GTK+, lui-même basé sur Pango, il est donc possible d'utiliser certaines fonctions de ce logiciel.

Un module perl permet aussi d'utiliser facilement Zenity au sein des scripts perl, voir la page CPAN associée (en anglais).

Coloration du texte

Rien de mieux qu'un peu de couleur pour égayer un texte. Pour cela, il faut utiliser la balise “span color” :

<span color=\"red\">red</span>

Fenêtre de test :

zenity --info --text "
<span color=\"red\">red</span>
<span color=\"green\">green</span>
<span color=\"blue\">blue</span>
<span color=\"yellow\">yellow</span>
<span color=\"magenta\">magenta</span>
<span color=\"white\">white</span>
<span color=\"black\">black</span>
<span color=\"gray\">gray</span>
<span color=\"lightblue\">lightblue</span>
<span color=\"lightgray\">lightgray</span>"

Choix de la police pour le texte

Marre de voir toujours la même police ? Il vous suffit donc d'utiliser la balise “span font-family”.

<span font-family=\"Arial\">essai de polices</span>

Fenêtre de test :

zenity --info --text "
<span font-family=\"Arial\">essai de polices</span>
<span font-family=\"sans-serif\">essai de polices</span>
<span font-family=\"Helvetica\">essai de polices</span>
<span font-family=\"impact\">essai de polices</span>
<span font-family=\"sans\">essai de polices</span>
<span font-family=\"webdings\">essai de polices</span>"

Changer la forme de la police

Un mot a besoin de ressortir du reste ? Il suffit de mettre en gras, en italique…

zenity --info --text "
<b>gras</b>
<big>grand</big>
<i>italique</i>
<s>barré</s>
<sub>indice</sub>
<sup>exposant</sup>
<small>petit</small>
<tt>espace entre les lettres</tt>
<u>souligné</u>"

Fenêtre avec liste de choix

Il est possible de créer une fenêtre comme suit :

Pour cela, il faut créer une boite de type “entry” et ajouter les différents choix de la liste à la fin de la commande.

N'oubliez pas les guillemets si vous mettez des espaces dans les réponses. Ex :

zenity --entry --title="Jour"
--text="Veuillez indiquer le jour de la semaine"
Lundi Mardi Mercredi "Autre jour..."

Pour ajouter une réponse de base, utilisez l'option “entry-text” :

zenity --entry --title="Jour" \
--text="Veuillez indiquer le jour de la semaine" --entry-text="Lundi" Mardi Mercredi

Boîte de message et récupérer la valeur

   if ret=`zenity --entry --title='Titre de la vidéo' \ 
   --text='Saisissez le titre de la vidéo : '`
    then
       titre=$ret
          if [ "$titre" = "" ]
          then
        echo "Il faut un titre, tient pan t'es mort!"
        exit
          fi
    else
          echo "Tsss, un titre on dit, pas le bouton annuler!"
    exit
   fi
echo $titre

Méthode 2 pour récupérer la valeur

Voici une méthode alternative à celle décrite ci-dessus :

dossierSortie=$(zenity --file-selection \
--title="Veuillez selectionner un dossier" \
--text="Choissisez un dossier quelconque" \
--directory);
 
echo ${dossierSortie}
sleep 10

Méthode 3 pour récupérer la valeur

Très simple :

variable=$(zenity --entry --title="Choix" --text="Indiquez un mot")
 
echo "le mot choisi est "$variable
sleep 5

Méthode pour récupérer la valeur avec --question

zenity --question \
--title "coffee" \
--text "Faire du café ?"
 
if [ $? = 0 ]
then
    echo "OUI ! Avec 2 sucres ..."
    sleep 3
else
    echo "NON ! Plutôt du thé ..."
    sleep 3
fi

Barres de progression

Depuis https://help.gnome.org/users/zenity/stable/progress.html.fr

Commande Rôle
--text=text Spécifier le texte affiché dans la boîte de dialogue de barre de progression.
--percentage=percentage Spécifier le pourcentage initial réglé dans la boîte de dialogue de barre de progression.
--auto-close Fermer la boîte de dialogue quand la barre de progression atteint 100%.
--pulsate Utiliser une barre de progression discontinue jusqu'à ce qu'un caractère EOF soit lu sur l'entrée standard.

Exemple:

#!/bin/sh
(
echo "10" ; sleep 1
echo "# Mise à jour des journaux de mail" ; sleep 1
echo "20" ; sleep 1
echo "# Remise à zéro des paramètres" ; sleep 1
echo "50" ; sleep 1
echo "Cette ligne est ignorée" ; sleep 1
echo "75" ; sleep 1
echo "# Redémarrage du système" ; sleep 1
echo "100" ; sleep 1
) |
zenity --progress \
  --title="Mise à jour des journaux système" \
  --text="Analyse des journaux de mail..." \
  --percentage=0
 
if [ "$?" = -1 ] ; then
  zenity --error \
    --text="Mise à jour annulée."
fi

Voir aussi une utilisation concrète dans un script nautilus sur la documentation de shred

Formulaire

Cette fonction est disponible depuis la version 3.2.0 de Zenity : cela ne fonctionnera pas avec les versions antérieures.
Commande Rôle
--text=Texte Spécifier le texte affiché dans la boîte de dialogue de barre de progression.
--separator=SÉPARATEUR Définit le caractère séparateur de sortie.
--add-entry=Nom du champ Ajoute une nouvelle zone de saisie dans la boîte de dialogue de formulaire.
--add-password=Nom du champ Ajoute une nouvelle zone de saisie de mot de passe dans la boîte de dialogue
de formulaire.
--add-calendar=Nom du champ calendrier Ajoute un nouveau calendrier dans la boîte de dialogue de formulaire.
--forms-date-format=MODÈLE Définit le format de la date retournée.

Exemple:

#!/bin/bash
 
#On crée le formulaire en stockant les valeurs de sortie dans $cfgpass :/
cfgpass=`zenity --forms \
    --title="Exemple qui tue la mort" \
    --text="Définir un nouveau mot de passe" \
    --add-entry="Nom de l'utilisateur" \
    --add-password="Ancien mot de passe" \
    --add-password="Nouveau mot de passe" \
    --add-password="Confirmer le nouveau mot de passe" \
    --separator="|"`
 
#Si on clique sur le bouton Annuler
if [ "$?" -eq 1 ]; then
    #On quitte le script
    exit
fi
#Sinon on continue
#On peut récupérer les valeurs des différents champs de cette façon :
echo "$cfgpass" | cut -d "|" -f1 #Nom de l'utilisateur
echo "$cfgpass" | cut -d "|" -f2 | md5sum #Ancien Mot de passe
echo "$cfgpass" | cut -d "|" -f3 | md5sum #Nouveau Mot de passe
echo "$cfgpass" | cut -d "|" -f4 | md5sum #Confirmation du nouveau mot de passe
 
echo "Franchement la classe cette nouvelle fonction Zenity :P"

http://img11.hostingpics.net/pics/246564zenityforms.png

Documentation de Zenity

Manuels

Exemples de code : Zenity par l'exemple


Contributeurs principaux : blackbg, hizoka.
Contributeurs secondaires : mirage59, TheCaméléon, Herrleiche, CKDevelop, Heuzef, eagle08

1)
Zenity is a tool that allows you to display Gtk+ dialog boxes from the command line and through shell scripts. It is similar to gdialog, but is intended to be saner. It comes from the same family as dialog, Xdialog, and cdialog, but it surpasses those projects by having a cooler name.