#1 Le 28/02/2018, à 16:06
- crasse2
creer petit GUI pour des scripts shell
salut !
j'aurai besoin d'une aide d'orientation car je souhaite creer un petit GUI pour des scripts shell que j'utilise frequemment.
concernant mes script, grossomodo ils executent un script LUA en utilisant différents parametre que je precise en amont (liste de fichiers dans divers dossiers, enumerage des ces meme fichiers, variables numeriques, string etc..) qui servent ensuite de parametres pour le fichiers LUA.
tout ceci marche a merveille, simplement a chaque nouvelle execution je modifie mes fichiers sh dans gedit et je me disais que ce serait plus sympa d'avoir une petite interface pour faire tout ça avec des boutons variés.
j'ai commencé a regarder du coté de Zenify, YAD, xDialog etc... mais, sauf erreur de ma part, ils ne permettent pas de gerer des instructions complexes ou séquencées.
du coup j'ai continué a cherché et je suis tombé sur WXpython, qui me semble très chouette, j'ai fait quelques tuto de demarrage et ça me plait bien, mais je me demandais, avant de me lancer a pieds joints dedans si c'est l'outil idéal pour mon usage ou si vous en auriez un plus recommandable ?
Hors ligne
#2 Le 01/03/2018, à 10:29
- kholo
Re : creer petit GUI pour des scripts shell
salut,
exemple à copier coller dans un fichier et le rendre exécutable
menu en bash terminal
#!/bin/bash
# ----------------------------------------------
nomlogiciel="${0##*/}"
FONCTION=""
VERSION="alpha"
# NOTES DE VERSIONS
# ----------------------------------------------
# kholo 2018
# ----------------------------------------------
echo "lancement $nomlogiciel..."
# echo "chargement ligne $LINENO"
# set -o xtrace
# ******************************************************************
# pour ouvrir un navigateur de fichier (debuggage)
# ******************************************************************
# nautilus "$PWD" ; exit 0
# ******************************************************************
# fixe la taille de la fenetre
# ******************************************************************
/usr/bin/resize -s 31 130 > /dev/null
reset > /dev/null
# ******************************************************************
# DECLARATION DES COULEURS
# ******************************************************************
# https://misc.flogisoft.com/bash/tip_colors_and_formatting
# explications
# echo -e "\033[31mHello\033[00m"
# On écrit \033, on met un crochet ouvrant [,
# puis on met le code de la couleur choisie (ici, 31 signifie rouge)
# et on finit avec un m.
# On affiche notre texte,
# ici Hello, puis on remet la couleur à noir (\033[00m),
# sinon le reste sera écrit en rouge aussi. :)
#
# exemples complexes
# enNoir='\033[1;30;40m'
# enRouge='\033[1;31;40m'
# enVert='\033[0;32;40m'
# enJaune='\033[1;33;40m'
fdNoir='\033[40m'
fdRouge='\033[41m'
fdVert='\033[42m'
fdJaune='\033[43m'
fdBleu='\033[44m'
fdRose='\033[45m'
fdCyan='\033[46m'
fdGris='\033[47m'
# fdDefaut='\033[49m'
enNoir='\033[30m'
enRouge='\033[31m'
enVert='\033[32m'
enJaune='\033[33m'
enBleu='\033[34m'
enRose='\033[35m'
enCyan='\033[36m'
enGris='\033[37m'
# enDefaut='\033[39m'
enGras='\033[1m'
enSouligner='\033[4m'
enClignotant='\033[5m'
enSurligner='\033[7m'
encache='\033[8m'
enDefaut='\033[0m'
# ******************************************************************
# JOURNAL
# ******************************************************************
fichier_log="${nomlogiciel}.log"
> "${fichier_log}"; # remet le journal à zéro
journal () { echo -e "$@" >> "${fichier_log}" ; }
journal "*******************initialisation*******************"
journal "chargement"
# ******************************************************************
# FONCTIONS POUR LA LISTE DE CHOIX
# ******************************************************************
pause () { read -p 'Appuyer sur [Enter] pour continuer...' ; }
on_clear_terminal () {
# echo -e "${enDefaut}"
reset > /dev/null
}
afficherMenu () {
echo -e "${enJaune}${enGras}"
echo -e "______________________________"
echo -e "Un titre."
echo -e "Ce module crée une liste de choix"
echo -e ""
echo -e "Faire un choix dans :"
echo -e "______________________________"
echo -e "${enJaune} 1. ${enVert}voir"
echo -e "${enJaune} 2. ${enVert}ouvrir"
echo -e "${enJaune} 3. ${enVert}enregistrer"
echo -e "${enJaune} 4. ${enVert}enregistrer-sous"
echo -e "${enJaune} 5. ${enVert}fonction test"
echo -e "${enJaune}______________________________"
echo -e "${enRouge} q. ${enVert}Quitter"
echo -e "${enVert}______________________________\n"
echo -en "${enGris}Votre choix : "
}
parserChoix () {
journal "parserChoix $1"
case "$choix" in
0) ;; # ne fait rien !
1) action 1 ;;
[2-4]) action "$choix" ;;
5) fonction_test ;;
q|Q) _quitter ;;
*) ;;
esac
pause
}
_quitter () {
journal "_quitter"
# mettre ici tout ce qui sera nescessaire à la bonne fermeture
exit 0
}
# ******************************************************************
# METTRE TOUTES LES FONCTIONS ICI
# ******************************************************************
action () {
echo -e "${enRouge}${enGras}vous avez choisi action $1 \n ... choisissez '5' !"
pause
}
fonction_test () {
echo -e "${enJaune}${enGras}$(date)\n${enGris}On peut mettre ce que l'on veut ici"
pause
}
# ******************************************************************
# FONCTION PRINCIPALE
# ******************************************************************
_main () {
on_clear_terminal
afficherMenu
# saisie du choix
read -r -n 1 choix # si les choix sont sur 1 caractère
# read -r choix # si les choix sont sur 2 caractères
on_clear_terminal
parserChoix
_main
}
_main
exit 0
zenity
#!/bin/bash
# ----------------------------------------------
nomlogiciel="${0##*/}"
FONCTION=""
VERSION="alpha"
# NOTES DE VERSIONS
# ----------------------------------------------
# kholo 2018
# ----------------------------------------------
echo "lancement $nomlogiciel..."
# echo "chargement ligne $LINENO"
# set -o xtrace
_journal () {
fichier_log="$nomlogiciel.log"
if [ -f "$fichier_log" ];
then
echo "..."
else
echo "Création du fichier de log : $fichier_log"
touch "$fichier_log";
fi
# tail
}
echo "ouverture du journal"
_journal
journal () {
echo "$@" | tee -a "$fichier_log" >/dev/null;
}
journal "*******************initialisation*******************"
journal "VARIABLES"
texte[0]="Choix 0"
texte[1]="Choix 1"
texte[2]="Choix 2"
texte[3]="Choix 3"
texte[4]="Choix 4"
texte[5]="Choix 5"
texte[6]="Choix 6"
texte[7]="Choix 7"
texte[8]="Choix 8"
texte[9]="Choix 9"
valeur[0]="Valeur 0"
valeur[1]="Valeur 1"
valeur[2]="Valeur 2"
valeur[3]="Valeur 3"
valeur[4]="Valeur 4"
valeur[5]="Valeur 5"
valeur[6]="Valeur 6"
valeur[7]="Valeur 7"
valeur[8]="Valeur 8"
valeur[9]="double-cliquez ici !"
_quitter () {
journal "_quitter"
# mettre ici tout ce qui sera nescessaire à la bonne fermeture
exit 0
}
frm_principale () {
journal "*******************frm_principale*******************"
LAQUESTION="
---------------------------------------------------------------------
Ce module crée une liste de choix
Tout à faire - <b>pas encore codé</b>"
zenity --list --width=600 --height=450 --text="$LAQUESTION" \
--ok-label="Sélectionner" \
--cancel-label="quitter" \
--hide-column 1 --column "" --column "${texte[0]}" --column "${valeur[0]}" \
1 "${texte[1]}" "${valeur[1]}" \
2 "${texte[2]}" "${valeur[2]}" \
0 "" "on peut facilement mettre des blancs" \
3 "${texte[3]}" "${valeur[3]}" \
4 "${texte[4]}" "${valeur[4]}" \
5 "${texte[5]}" "${valeur[5]}" \
6 "${texte[6]}" "${valeur[6]}" \
7 "${texte[7]}" "${valeur[7]}" \
0 "" "" \
8 "${texte[8]}" "${valeur[8]}" \
9 "${texte[9]}" "${valeur[9]}" ;
}
frm_principale_parser () {
journal "*******************frm_principale_parser*******************"
journal "frm_principale_parser : $1"
case $1 in
1) action 1 ;;
2) action 2 ;;
3) action 3 ;;
4) action 4 ;;
5) action 5 ;;
6) action 6 ;;
7) action 7 ;;
8) action 8 ;;
9)
fonction_test
;;
0) ;; # rien à faire
*)
quitter=1
_quitter ;;
esac
}
action () {
zenity --info --text="vous avez choisi action $1 \n ... choisissez le 9 !"
}
fonction_test () {
message="$(date)
On peut mettre ce que l'on veut ici"
echo "$message"
zenity --info --text="$message"
}
_main () {
journal "_main"
menuchoice=$(frm_principale);
frm_principale_parser ${menuchoice%|*} # pour corriger le 1|1
if [[ $quitter -ne 1 ]] ; then
# on boucle _main tant que quitter est différent de 1
_main
fi
}
# Programme principale
_main
exit 0
Hors ligne
#3 Le 04/03/2018, à 18:06
- Bigcake
Re : creer petit GUI pour des scripts shell
Bonjour,
Sinon tu peux créer des interfaces GTK dans tes scripts shell avec 'gtkdialog'
#! /bin/bash
export WINDOW='<window width_request="200" resizable="true" title="Test GTK" window_position="0" decorated="true">
<vbox>
<entry>
<variable>ENTRY</variable>
</entry>
<hbox>
<button cancel></button>
<button ok></button>
</hbox>
</vbox>
</window>'
gtkdialog -c --program=WINDOW
echo "$ENTRY"
Dernière modification par Bigcake (Le 04/03/2018, à 18:08)
"Les gens" ne sont pas cons, ils ont été habitués à la facilité et à la désinformation. Le meilleur moyen de ne pas les aider, c'est de se moquer. Le meilleur moyen de les aider, c'est de les informer, encore et encore. La réflexion viendra. N'oubliez pas que vous aussi, vous êtes le con d'un autre.
Smartphone+GNU/Linux=Librem5
Hors ligne