Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/02/2018, à 17: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, à 11: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, à 19: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, à 19: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