| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| yad_yet_another_dialog [Le 15/09/2019, 15:04] – [YAD] 185.128.25.163 | yad_yet_another_dialog [Le 24/07/2026, 22:30] (Version actuelle) – [Voir aussi] Zococo |
|---|
| **Yad** (« Yet Another Dialog », « encore une boîte de dialogue ») est un outil pour créer des boîtes de dialogue graphiques à partir de scripts shell. | **Yad** (« Yet Another Dialog », « encore une boîte de dialogue ») est un outil pour créer des boîtes de dialogue graphiques à partir de scripts shell. |
| |
| **Yad** est un fork de [[:Zenity|Zenity]] | **Yad** est un fork de [[:Zenity|Zenity]]. |
| Ses avantages par rapport à Zenity sont l'intégration de plusieurs contrôles sur une même fenêtre (voir le paramètre --form) | Ses avantages par rapport à Zenity sont l'intégration de plusieurs contrôles sur une même fenêtre (voir le paramètre %%--%%form) |
| |
| ===== Auteurs ===== | ===== Auteurs ===== |
| |
| ==== Avec un ppa ==== | ==== Avec un ppa ==== |
| Pour installer une version récente de YAD, vous pouvez installer YAD avec le PPA de webupd8, en une ligne : | Pour installer une version récente de YAD, vous pouvez installer YAD avec le PPA de webupd8, en une ligne (obsolète : pas de version au delà de Vivid) : |
| <code>sudo add-apt-repository ppa:nilarimogard/webupd8 -y && sudo apt update && sudo apt install yad -y</code> | <code>sudo add-apt-repository ppa:nilarimogard/webupd8 -y && sudo apt update && sudo apt install yad -y</code> |
| |
| Vous devrez peut-être installer gcc, libwebkitgtk-dev | Vous devrez peut-être installer gcc, libwebkitgtk-dev |
| |
| Pour avoir la dernière version, télécharger l'archive sur [[https://sourceforge.net/projects/yad-dialog/|la page officielle de Yad]] | Pour avoir la dernière version, télécharger l'archive sur [[https://github.com/v1cont/yad/|la page officielle de Yad]] |
| Décompressez-la ou vous voulez. | Décompressez-la ou vous voulez. |
| Ouvrez un terminal | Ouvrez un terminal |
| </code> | </code> |
| <note> | <note> |
| L'auteur fourni une petite application qui permet de lister les icônes pouvant être utilisées. | L'auteur fournit une petite application qui permet de lister les icônes pouvant être utilisées. |
| Il vous faut également activer le widget --html. | Il vous faut également activer le widget %%--%%html. |
| Procèder comme suit pour les installer. | Procéder comme suit pour les installer. |
| </note> | </note> |
| <code> | <code> |
| | Affichage |''%%--html%%'' | Affiche un navigateur| | | Affichage |''%%--html%%'' | Affiche un navigateur| |
| | Affichage |''%%--list%%'' | Affiche une liste| | | Affichage |''%%--list%%'' | Affiche une liste| |
| | Affichage |''%%--multi-progress%%'' | Affiche plusieurs barres de progresion | | | Affichage |''%%--multi-progress%%'' | Affiche plusieurs barres de progression | |
| | Affichage |''%%--notification%%'' | Affiche une icone dans la zone de notification | | | Affichage |''%%--notification%%'' | Affiche une icone dans la zone de notification | |
| | Affichage |''%%--progress%%'' | Affiche une barre de progression | | | Affichage |''%%--progress%%'' | Affiche une barre de progression | |
| ==== Types de champs de la fenêtre form (formulaire) ==== | ==== Types de champs de la fenêtre form (formulaire) ==== |
| Les formulaires permettent de décliner les différentes options de yad dans la même fenêtre. | Les formulaires permettent de décliner les différentes options de yad dans la même fenêtre. |
| Les types de champs de formulaire sont saisis sous la forme | Les types de champs de formulaire sont saisis sous la forme |
| --field="LABEL"[:TYPE] | %%--%%field="LABEL"[:TYPE] |
| Les types de champs sont les suivants : H, RO, NUM, CHK, CB, CBE, CE, FL, SFL, DIR, CDIR, FN, MFL, MDIR, DT, SCL, CLR, BTN, FBTN, LBL, TXT. || | Les types de champs sont les suivants : H, RO, NUM, CHK, CB, CBE, CE, FL, SFL, DIR, CDIR, FN, MFL, MDIR, DT, SCL, CLR, BTN, FBTN, LBL, TXT. || |
| ^Type de champ^ Utilisation^ | ^Type de champ^ Utilisation^ |
| ===== Exemples ===== | ===== Exemples ===== |
| Avant de vous lancer dans la lecture, notez que vous trouverez de nombreux exemples, simples et complexes avec ces liens : | Avant de vous lancer dans la lecture, notez que vous trouverez de nombreux exemples, simples et complexes avec ces liens : |
| * [[http://smokey01.com/yad|Apprendre par l'exemple]] ([[https://www.dropbox.com/s/56k5ta6j52r9inu/yad.pdf|copie en PDF]]) | * [[https://yad-guide.ingk.se/examples/examples.html|Apprendre par l'exemple]] |
| * [[https://code.google.com/archive/p/yad/wikis|Applications simples]] | * [[https://code.google.com/archive/p/yad/wikis|Applications simples]] |
| ====--calendar==== | ====--calendar==== |
| Dans cet exemple le calendrier s'ouvrira à la date du jour et la sortie sera de format sam./27/juil./2019/ | Dans cet exemple le calendrier s'ouvrira à la date du jour et la sortie sera de format sam./27/juil./2019/ |
| |
| --title="Titre de la fenêtre": Indique le titre de votre fenêtre. | %%--%%title="Titre de la fenêtre": Indique le titre de votre fenêtre. |
| |
| --window-icon="yad": Affiche une icône dans la barre du titre (Selon votre thème.) et sur le bouton de la liste des fenêtres. | %%--%%window-icon="yad": Affiche une icône dans la barre du titre (Selon votre thème.) et sur le bouton de la liste des fenêtres. |
| <code> | <code> |
| jour=$(date +%d) | jour=$(date +%d) |
| #!/bin/bash | #!/bin/bash |
| recherche=$(yad --entry --title='Recherche web' --text='Tapez votre recherche' --text-align="center" --no-escape --mouse --undecorated --skip-taskbar --on-top) | recherche=$(yad --entry --title='Recherche web' --text='Tapez votre recherche' --text-align="center" --no-escape --mouse --undecorated --skip-taskbar --on-top) |
| recherche=$(echo "$recherche" | sed 's/ /+/g') | recherche=${recherche// /+} |
| xdg-open https://www.google.fr/search?q="$recherche"\&site=webhp\&source=lnt\&tbs=lr:lang_1fr\&lr=lang_fr | xdg-open "https://www.google.fr/search?q=$recherche&site=webhp&source=lnt&tbs=lr:lang_1fr&lr=lang_fr" |
| </code> | </code> |
| ====--form==== | ====--form==== |
| --field="recherche:" '' \ | --field="recherche:" '' \ |
| --field="Moteur:CB" 'Forum ubuntu!^Google fr') | --field="Moteur:CB" 'Forum ubuntu!^Google fr') |
| rech=$(echo $search | awk 'BEGIN {FS="|" } { print $1 }') | rech=$(echo "$search" | awk 'BEGIN {FS="|" } { print $1 }') |
| moteur=$(echo $search | awk 'BEGIN {FS="|" } { print $2 }') | moteur=$(echo "$search" | awk 'BEGIN {FS="|" } { print $2 }') |
| if [ "$moteur" = "Forum ubuntu" ] | if [ "$moteur" = "Forum ubuntu" ] |
| then | then |
| <code>yad --notification</code> | <code>yad --notification</code> |
| |
| On peux changer l’icône avec le paramètre **--image** | On peux changer l’icône avec le paramètre **%%--%%image** |
| <code>yad --notification --image="gtk-help"</code> | <code>yad --notification --image="gtk-help"</code> |
| <code>yad --notification --image="system-software-update"</code> | <code>yad --notification --image="system-software-update"</code> |
| |
| Exemple avec un script faisant les mises à jour et affichant avec une icône dans la zone de notification pour le signaler : | Exemple avec un script faisant les mises à jour et affichant avec une icône dans la zone de notification pour le signaler : |
| <code>#!/bin/bash | <code> |
| | #!/bin/bash |
| MSG="Mise à jour du système en cours, n'éteignez pas l'ordinateur..." | MSG="Mise à jour du système en cours, n'éteignez pas l'ordinateur..." |
| notify-send "$MSG" | notify-send "$MSG" |
| faireMaJ () { (sudo apt update ; sudo apt full-upgrade) > /dev/null; quit ; } | faireMaJ () { (sudo apt update ; sudo apt full-upgrade) > /dev/null; } |
| faireMaJ | yad --notification --no-middle --text="$MSG" --image="system-software-update" --command="zenity --info --text \"$MSG\"" --listen | faireMaJ | yad --notification --no-middle --text="$MSG" --image="system-software-update" --command="zenity --info --text \"$MSG\"" --listen |
| exit 0</code> | </code> |
| {{::yad.3.png?400|}} | {{::yad.3.png?400|}} |
| |
| --field="recherche:" '' \ | --field="recherche:" '' \ |
| --field="Moteur:CB" 'Forum ubuntu!^Google fr') | --field="Moteur:CB" 'Forum ubuntu!^Google fr') |
| rech=$(echo $search | awk 'BEGIN {FS="|" } { print $1 }') | rech=$(echo "$search" | awk 'BEGIN {FS="|" } { print $1 }') |
| moteur=$(echo $search | awk 'BEGIN {FS="|" } { print $2 }') | moteur=$(echo "$search" | awk 'BEGIN {FS="|" } { print $2 }') |
| if [ "$moteur" = "Forum ubuntu" ] | if [ "$moteur" = "Forum ubuntu" ] |
| then | then |
| #!/bin/bash | #!/bin/bash |
| #####ID --KEY Création aléatoire de l'id | #####ID --KEY Création aléatoire de l'id |
| id=$(echo $[($RANDOM % ($[10000 - 32000] + 1)) + 10000] ) | id=$(($RANDOM % ($((10000 - 32000)) + 1) + 10000)) |
| ##########Onglet 1########## | ##########Onglet 1########## |
| #####Avec une colonne####### | #####Avec une colonne####### |
| else | else |
| retour=$(yad --title="Fichier à afficher" --width 800 --height 200 --text-align="center" --list --radiolist --column="Sélectionné" --column="Fichier" --column="Mis à jour" --column="Utillisé" False "$HOME/Documents/FichierUn" "Non" "Non" False "$HOME/Documents/FichierDEux" "Oui" "Non" True "$HOME/Documents/FichierTrois" "Oui" "Non") | retour=$(yad --title="Fichier à afficher" --width 800 --height 200 --text-align="center" --list --radiolist --column="Sélectionné" --column="Fichier" --column="Mis à jour" --column="Utillisé" False "$HOME/Documents/FichierUn" "Non" "Non" False "$HOME/Documents/FichierDEux" "Oui" "Non" True "$HOME/Documents/FichierTrois" "Oui" "Non") |
| cat $(echo "$retour" | cut -d'|' -f2) | cat "$(echo "$retour" | cut -d'|' -f2)" |
| fi | fi |
| exit 0; | |
| </code> | </code> |
| {{ :yad_disco_00_radiolist.png?direct&800 |}} | {{ :yad_disco_00_radiolist.png?direct&800 |}} |
| {{ :yad_disco_01_checklist.png?direct&800 |}} | {{ :yad_disco_01_checklist.png?direct&800 |}} |
| <note tip>Bien qu'étant qualifiée d'obsolète par certains sites, l'option --radiolist permet donc de limiter la sélection à un seul choix quand --checklist permet d'en faire plusieurs. Une autre manière de pouvoir sélectionner plusieurs items sans afficher de case à cocher consite à utiliser l'option --multiple avec --list.</note> | <note tip>Bien qu'étant qualifiée d'obsolète par certains sites, l'option --radiolist permet donc de limiter la sélection à un seul choix quand --checklist permet d'en faire plusieurs. Une autre manière de pouvoir sélectionner plusieurs items sans afficher de case à cocher consite à utiliser l'option --multiple avec --list.</note> |
| ===== Trucs et astuces ===== | ===== Pango Markup Language - mettre en forme un texte ===== |
| ==== États de sorties==== | Le langage de Markup Pango est un langage de mise en forme très simple qui est supporté par Yad. Il permet de mettre en forme le texte via des balises <span></span>. |
| 0 L'utilisateur a appuyé sur le bouton OK | |
| |
| | Quelques balises inspirées du html existent aussi (sans balise <span>) : <b> pour gras, <u> pour souligné ... |
| |
| 1 L'utilisateur a appuyé sur le bouton Annuler | La liste des balises autorisées se trouvent ici : [[https://developer.gnome.org/pygtk/stable/pango-markup-language.html]] |
| | |
| | Exemples : |
| | |
| | **font_desc** : ''%%--%%text="une <span font_desc='Sans italic 10'>Maison</span> neuve"'' affiche le mot **maison** dans une police ''sans'', en italique, avec une taille de 10. |
| | |
| | **font_desc** : ''%%--%%text="une <span font_desc='Sans italic 10' strikethrough='true'>Maison</span> neuve"'' affiche le mot **maison** dans une police ''sans'', en italique, avec une taille de 10 et barrée (strikethrough) |
| | |
| | **souligné** : ''%%--%%text="une <u>Maison</u> neuve"'' affiche le mot **maison** en souligné. |
| | |
| | |
| | ===== Trucs et astuces ===== |
| | ==== États de sorties==== |
| | Voilà le code (testable) renvoyé par **yad** quand on appuie sur certains boutons pour quitter une boite de dialogue : |
| |
| | **0** : L'utilisateur a appuyé sur le bouton OK |
| |
| 70 La boîte de dialogue a été fermée parce que le délai d'attente a été atteint. (Dans le cas d'un timeout) | **1** : L'utilisateur a appuyé sur le bouton Annuler |
| |
| | **70** : La boîte de dialogue a été fermée parce que le délai d'attente a été atteint. (Dans le cas d'un timeout) |
| |
| 252 La boîte de dialogue a été fermée en appuyant sur la touche Echap ou en cliquant sur le bouton de fermeture de la barre du titre de la boîte de dialogue | **252** : La boîte de dialogue a été fermée en appuyant sur la touche Echap ou en cliquant sur le bouton de fermeture de la barre du titre de la boîte de dialogue |
| |
| |
| echo "$?" | echo "$?" |
| </code> | </code> |
| Comme vous le constaté la fenêtre se ferme mais le script continu. | Comme vous le constatez la fenêtre se ferme mais le script continu. |
| |
| Personnellement lorsque je clique sur le bouton de fermeture, le bouton Annuler ou la touche Echap je veux arrêter le script. | Personnellement lorsque je clique sur le bouton de fermeture, le bouton Annuler ou la touche Echap je veux arrêter le script. |
| |
| ===Fermer la fenêtre et lancer une action=== | ===Fermer la fenêtre et lancer une action=== |
| Il est possible d'affecter une action à un bouton yad. | Il est possible d'affecter une action à un bouton yad. |
| <code> | <code> |
| yad --form --field "Bouton 1:btn" --field "Bouton 2:btn" --field "Bouton 3:btn" "echo 'bouton n°1 cliqué'" "echo 'bouton n°2 cliqué'" "echo 'bouton n°3 cliqué'" | yad --form --field "Bouton 1:btn" --field "Bouton 2:btn" --field "Bouton 3:btn" "echo 'bouton n°1 cliqué'" "echo 'bouton n°2 cliqué'" "echo 'bouton n°3 cliqué'" |
| * Pour accéder à la valeur de chaque champ, il suffit d'accéder à la case d'indice correspondant dans le tableau $LesParametres qui est affichée par ${LesParametres[i]} ou i est l'indice de la case. | * Pour accéder à la valeur de chaque champ, il suffit d'accéder à la case d'indice correspondant dans le tableau $LesParametres qui est affichée par ${LesParametres[i]} ou i est l'indice de la case. |
| ==== Gestion d'erreur : Gtk-Message ==== | ==== Gestion d'erreur : Gtk-Message ==== |
| L'utilisation de fenêtres gtk génère l'affichage d'un message d'erreur dans la console. | L'utilisation de fenêtres gtk génère l'affichage d'un message d'erreur dans la console. |
| <code> | <code> |
| usr@pc:~/Rep$ Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged. | usr@pc:~/Rep$ Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged. |
| | |
| * **(en)** [[http://manpages.ubuntu.com/manpages/wily/man1/yad.1.html|Manuel des fonctions]] | * **(en)** [[http://manpages.ubuntu.com/manpages/wily/man1/yad.1.html|Manuel des fonctions]] |
| * **(en)** [[http://smokey01.com/yad/|Exemples simples de toutes les fonctions de base (Recommandé)]] | * **(en)** [[https://yad-guide.ingk.se/YAD_Guide.html|Exemples simples de toutes les fonctions de base (Recommandé)]] |
| * **(en)** [[https://sourceforge.net/p/yad-dialog/wiki/browse_pages/|Site officiel avec exemples d'applications]] | * **(en)** [[https://sourceforge.net/p/yad-dialog/wiki/browse_pages/|Site officiel avec exemples d'applications]] |
| * **(en)** [[https://groups.google.com/forum/#!forum/yad-common|Forum de discussion. L'auteur participe.]] | * **(en)** [[https://groups.google.com/forum/#!forum/yad-common|Forum de discussion. L'auteur participe.]] |
| * **(en)** [[http://www.thelinuxrain.com/articles/multiple-item-data-entry-with-yad|Exemples sur les items multiples]] | * **(en)** [[http://www.thelinuxrain.com/articles/multiple-item-data-entry-with-yad|Exemples sur les items multiples]] |
| * **(en)** [[https://pypi.python.org/pypi?name=yad&version=0.9.3&:action=display|Ajouter Yad à vos scripts Python (non testé)]] | * **(en)** [[https://pypi.python.org/pypi?name=yad&version=0.9.3&:action=display|Ajouter Yad à vos scripts Python (non testé)]] |
| | * [[zenity|Zenity]] |
| ---- | ---- |
| //Contributeurs principaux : [[sergeG75018]], LukePerp.// | //Contributeurs principaux : [[sergeG75018]], LukePerp., [[utilisateurs:amiralgaby]]// |
| | |
| //Basé sur [[http://manpages.ubuntu.com/manpages/wily/man1/yad.1.html|« les pages du manuel »]].// | //Basé sur [[http://manpages.ubuntu.com/manpages/wily/man1/yad.1.html|« les pages du manuel »]].// |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |