Skip to content

Instantly share code, notes, and snippets.

@benoitpetit
Last active September 28, 2024 20:30
Show Gist options
  • Save benoitpetit/ba561bfd1dfcf8ffd29b6f0b4615ce96 to your computer and use it in GitHub Desktop.
Save benoitpetit/ba561bfd1dfcf8ffd29b6f0b4615ce96 to your computer and use it in GitHub Desktop.
Interface Graphique avec Zenity

Description du Script : Interface Graphique avec Zenity

Ce script Bash utilise Zenity, un outil permettant de créer des interfaces graphiques simples directement depuis la ligne de commande. Il présente un menu interactif où l'utilisateur peut choisir parmi diverses options, chacune illustrant une fonctionnalité de Zenity.

Fonctionnalités :

  • Boîtes de Dialogue : Affiche des messages d'information, d'erreur et d'avertissement.
  • Interactions Utilisateur : Permet de poser des questions avec des réponses "Oui" ou "Non", et de recueillir des saisies de texte et de mot de passe.
  • Barres de Progression : Affiche une barre de progression normale ou pulsée, simulant un chargement ou un traitement en cours.
  • Sélection de Fichiers : Offre la possibilité de sélectionner un ou plusieurs fichiers, de choisir un dossier ou d'enregistrer un fichier.
  • Calendrier et Échelle : Permet à l'utilisateur de choisir une date à l'aide d'un calendrier ou une valeur via une échelle.
  • Formulaires : Propose un formulaire où l'utilisateur peut entrer plusieurs types d'informations (texte, mot de passe, date, choix dans une liste).
  • Notifications : Affiche des notifications simples à l'utilisateur.
  • Sélection de Couleur : Permet à l'utilisateur de choisir une couleur à partir d'une palette.

Utilisation :

L'utilisateur interagit avec le script via un menu visuel, où il peut sélectionner une option en utilisant la souris. Chaque option est accompagnée de fonctionnalités démontrant comment Zenity peut faciliter l'interaction avec l'utilisateur, le tout dans un environnement graphique convivial.

Objectif Pédagogique :

Ce script est conçu pour les développeurs souhaitant apprendre à utiliser Zenity pour intégrer des interfaces graphiques dans leurs scripts Bash. Les commentaires détaillés présents dans le code expliquent chaque étape et chaque fonction, rendant l'apprentissage accessible et intuitif.

#!/bin/bash
# Fonction pour afficher le résultat dans une boîte de dialogue Zenity.
# Si l'utilisateur a annulé l'action ou n'a rien saisi, on affiche un message d'annulation.
show_result() {
if [ -z "$1" ]; then # Vérifie si l'argument est vide (si aucune saisie n'a été faite ou si l'annulation a été choisie).
zenity --info --title="Résultat" --text="Action annulée ou aucune saisie" --width=300
else # Sinon, on affiche le résultat que l'utilisateur a saisi ou sélectionné.
zenity --info --title="Résultat" --text="$1" --width=300
fi
}
# Fonction pour afficher une barre de progression.
# On utilise une boucle qui va simuler une tâche qui progresse.
show_progress() {
(
# Cette boucle for simule une progression de 1 à 100%.
for i in {1..100}; do
echo $i # Envoie la valeur actuelle de la progression à Zenity.
sleep 0.05 # Attend un court instant (0.05 secondes) pour simuler le passage du temps.
done
) | zenity --progress --title="$1" --text="Chargement en cours..." --auto-close --percentage=0
# On vérifie si l'utilisateur a annulé la barre de progression.
# $? contient le code de retour de la dernière commande exécutée.
# Un code différent de 0 signifie une annulation.
if [ $? -ne 0 ]; then
zenity --info --title="Résultat" --text="Progression annulée" --width=300
fi
}
# Fonction pour une barre de progression pulsée (qui ne montre pas de pourcentage, mais un traitement en cours).
show_pulsate_progress() {
(
# Cette boucle infinie envoie un message à Zenity pour afficher "Traitement en cours..."
while :; do
echo "# Traitement en cours..." # Le # permet de spécifier un message dans une barre de progression Zenity.
sleep 1 # Attend une seconde avant de recommencer.
done
) | zenity --progress --title="$1" --text="Traitement en cours..." --pulsate --auto-close --timeout=10
# On vérifie si l'utilisateur a annulé la barre de progression pulsée.
if [ $? -ne 0 ]; then
zenity --info --title="Résultat" --text="Progression annulée" --width=300
fi
}
# Début du menu principal.
# Ce menu est affiché tant que l'utilisateur ne choisit pas l'option "Quitter".
while true; do
# Zenity est utilisé pour afficher un menu de sélection sous forme de liste.
# Chaque option correspond à une action différente à exécuter.
choice=$(zenity --list --title="Démo complète Zenity" --text="Choisissez une option:" --column="Options" \
"Boîte d'information" \
"Boîte d'erreur" \
"Boîte d'avertissement" \
"Question" \
"Saisie de texte" \
"Saisie de mot de passe" \
"Barre de progression" \
"Barre de progression pulsée" \
"Sélection de fichier" \
"Sélection de fichiers multiples" \
"Sélection de dossier" \
"Enregistrement de fichier" \
"Calendrier" \
"Échelle" \
"Liste de sélection" \
"Liste à cocher" \
"Liste radio" \
"Liste éditable" \
"Saisie de texte multilignes" \
"Saisie de texte multilignes éditable" \
"Notification" \
"Sélection de couleur" \
"Formulaire" \
"Boîte de mot de passe avec nom d'utilisateur" \
"Quitter")
# Si l'utilisateur clique sur "Annuler" ou ferme la fenêtre, la variable choice sera vide.
if [ -z "$choice" ]; then
exit 0 # On quitte le programme si aucune option n'a été choisie.
fi
# Utilisation de la structure "case" pour exécuter l'action correspondant à l'option choisie.
case $choice in
# Option "Boîte d'information"
"Boîte d'information")
# Affiche une boîte d'information simple.
zenity --info --title="Information" --text="Ceci est une boîte d'information." --icon-name=dialog-information
;;
# Option "Boîte d'erreur"
"Boîte d'erreur")
# Affiche une boîte d'erreur avec un message d'erreur.
zenity --error --title="Erreur" --text="Ceci est une boîte d'erreur." --width=250
;;
# Option "Boîte d'avertissement"
"Boîte d'avertissement")
# Affiche une boîte d'avertissement avec un message.
zenity --warning --title="Avertissement" --text="Ceci est une boîte d'avertissement." --icon-name=dialog-warning
;;
# Option "Question"
"Question")
# Affiche une boîte de dialogue pour poser une question avec deux boutons : "Oui" et "Non".
# Si l'utilisateur clique sur "Oui", la commande retourne 0, sinon elle retourne 1.
if zenity --question --title="Question" --text="Êtes-vous sûr de vouloir continuer ?" --ok-label="Oui" --cancel-label="Non"; then
show_result "Vous avez répondu : Oui" # Affiche "Oui" si l'utilisateur a confirmé.
else
show_result "Vous avez répondu : Non" # Affiche "Non" si l'utilisateur a annulé.
fi
;;
# Option "Saisie de texte"
"Saisie de texte")
# Affiche une boîte de saisie où l'utilisateur peut entrer du texte.
result=$(zenity --entry --title="Saisie" --text="Entrez votre nom:" --entry-text="Nom par défaut")
show_result "$result" # Affiche le texte saisi par l'utilisateur.
;;
# Option "Saisie de mot de passe"
"Saisie de mot de passe")
# Affiche une boîte de saisie pour entrer un mot de passe.
# Le texte entré est masqué (sécurisé).
result=$(zenity --password --title="Mot de passe")
show_result "$result" # Affiche le mot de passe (pour des raisons pédagogiques ici, mais à éviter en production !).
;;
# Option "Barre de progression"
"Barre de progression")
show_progress "Progression" # Appelle la fonction qui affiche la barre de progression.
;;
# Option "Barre de progression pulsée"
"Barre de progression pulsée")
show_pulsate_progress "Progression pulsée" # Appelle la fonction qui affiche la barre de progression pulsée.
;;
# Option "Sélection de fichier"
"Sélection de fichier")
# Affiche une boîte de dialogue pour sélectionner un fichier.
result=$(zenity --file-selection --title="Sélectionnez un fichier" --file-filter="Texte | *.txt *.doc")
show_result "$result" # Affiche le chemin du fichier sélectionné.
;;
# Option "Sélection de fichiers multiples"
"Sélection de fichiers multiples")
# Permet à l'utilisateur de sélectionner plusieurs fichiers à la fois.
result=$(zenity --file-selection --title="Sélectionnez des fichiers" --multiple --separator=", ")
show_result "$result" # Affiche les chemins des fichiers sélectionnés, séparés par des virgules.
;;
# Option "Sélection de dossier"
"Sélection de dossier")
# Affiche une boîte de dialogue pour choisir un dossier.
result=$(zenity --file-selection --directory --title="Sélectionnez un dossier")
show_result "$result" # Affiche le chemin du dossier sélectionné.
;;
# Option "Enregistrement de fichier"
"Enregistrement de fichier")
# Boîte de dialogue pour enregistrer un fichier, en spécifiant un nom par défaut.
result=$(zenity --file-selection --save --title="Enregistrer le fichier" --filename="nouveau_fichier.txt")
show_result "$result" # Affiche le chemin du fichier à enregistrer.
;;
# Option "Calendrier"
"Calendrier")
# Boîte de dialogue de sélection de date avec un calendrier.
result=$(zenity --calendar --title="Calendrier" --text="Choisissez une date" --date-format="%Y-%m-%d")
show_result "$result" # Affiche la date sélectionnée.
;;
# Option "Échelle"
"Échelle")
# Affiche une échelle où l'utilisateur peut choisir une valeur entre un minimum et un maximum.
result=$(zenity --scale --title="Échelle" --text="Choisissez une valeur" --min-value=0 --max-value=100 --value=50 --step=5)
show_result "$result" # Affiche la valeur choisie par l'utilisateur.
;;
# Option "Liste de sélection"
"Liste de sélection")
# Affiche une liste d'options avec deux colonnes, permettant à l'utilisateur de choisir une option.
result=$(zenity --list --title="Liste" --text="Choisissez un élément" --column="ID" --column="Options" 1 "Option 1" 2 "Option 2" 3 "Option 3" --print-column=ALL)
show_result "$result" # Affiche l'élément sélectionné.
;;
# Option "Liste à cocher"
"Liste à cocher")
# Affiche une liste d'options avec des cases à cocher.
result=$(zenity --list --checklist --title="Liste à cocher" --text="Choisissez des éléments" --column="Sélection" --column="ID" --column="Options" FALSE 1 "Option 1" FALSE 2 "Option 2" FALSE 3 "Option 3")
show_result "$result" # Affiche les éléments cochés par l'utilisateur.
;;
# Option "Liste radio"
"Liste radio")
# Affiche une liste d'options avec des boutons radio (sélection unique).
result=$(zenity --list --radiolist --title="Liste radio" --text="Choisissez une option" --column="Sélection" --column="ID" --column="Options" TRUE 1 "Option 1" FALSE 2 "Option 2" FALSE 3 "Option 3")
show_result "$result" # Affiche l'élément sélectionné.
;;
# Option "Liste éditable"
"Liste éditable")
# Affiche une liste éditable où l'utilisateur peut modifier les options existantes.
result=$(zenity --list --title="Liste éditable" --text="Modifiez les éléments" --column="Options" --editable "Option 1" "Option 2" "Option 3")
show_result "$result" # Affiche l'élément modifié.
;;
# Option "Saisie de texte multilignes"
"Saisie de texte multilignes")
# Affiche une boîte de texte multilignes avec un contenu provenant d'un fichier.
result=$(zenity --text-info --title="Saisie multilignes" --filename="/etc/hosts")
show_result "$(echo "$result" | head -n 3)..." # Affiche les trois premières lignes du fichier pour l'exemple.
;;
# Option "Saisie de texte multilignes éditable"
"Saisie de texte multilignes éditable")
# Même chose que la précédente, mais le texte est éditable.
result=$(zenity --text-info --title="Saisie multilignes éditable" --editable --filename="/etc/hosts")
show_result "$(echo "$result" | head -n 3)..." # Affiche les trois premières lignes modifiées.
;;
# Option "Notification"
"Notification")
# Affiche une notification simple.
zenity --notification --window-icon="info" --text="Ceci est une notification"
;;
# Option "Sélection de couleur"
"Sélection de couleur")
# Affiche une boîte de sélection de couleur.
result=$(zenity --color-selection --title="Sélectionnez une couleur" --color="#FF0000")
show_result "$result" # Affiche la couleur sélectionnée.
;;
# Option "Formulaire"
"Formulaire")
# Affiche un formulaire avec plusieurs champs (texte, mot de passe, calendrier, liste déroulante, combo).
result=$(zenity --forms --title="Formulaire" --text="Entrez vos informations" \
--add-entry="Nom" \
--add-password="Mot de passe" \
--add-calendar="Date de naissance" \
--add-list="Pays" --list-values="France|Allemagne|Espagne" \
--add-combo="Ville" --combo-values="Paris|Berlin|Madrid")
show_result "$result" # Affiche les informations saisies dans le formulaire.
;;
# Option "Boîte de mot de passe avec nom d'utilisateur"
"Boîte de mot de passe avec nom d'utilisateur")
# Affiche une boîte de dialogue pour entrer un nom d'utilisateur et un mot de passe.
result=$(zenity --password --title="Connexion" --username)
show_result "$result" # Affiche le nom d'utilisateur et le mot de passe (à éviter en production).
;;
# Option "Quitter"
"Quitter")
exit 0 # Quitte le programme si l'utilisateur choisit "Quitter".
;;
# Option invalide (si jamais une option non prévue est sélectionnée, mais cela ne devrait pas arriver ici).
*)
zenity --error --text="Option invalide"
;;
esac
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment