Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
glade2script [Le 08/10/2012, 17:29] – [Glade2script] 81.185.32.183 | glade2script [Le 10/02/2017, 11:09] (Version actuelle) – tags L'Africain | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> | ||
+ | ---- | ||
+ | ======Glade2script====== | ||
+ | |||
+ | Surcouche **pygtk-glade** pour gestion interface graphique depuis un script **bash**, **python** ou autre. | ||
+ | |||
+ | <note warning> | ||
+ | Merci de se référer à celle ci: [[http:// | ||
+ | </ | ||
+ | =====Principe===== | ||
+ | L' | ||
+ | Dans ce script, on y placera les actions à effectuer en réaction à l' | ||
+ | |||
+ | glade2script, | ||
+ | |||
+ | Pour envoyer des informations depuis GTK au script, il écrit dans un fichier (FIFO), sur lequel le script est connecté et en récupère les données pour les interpréter sous forme d' | ||
+ | |||
+ | Pour récupérer la valeur d'un widget, 2 solutions, soit via les **callbacks** (qui appellent nos fonctions avec arguments, à renseigner dans le **glade**) ou via les commandes **glade2script** qui agissent sur l' | ||
+ | |||
+ | __Les commandes seront du type :__ | ||
+ | # Commande glade2script et pygtk | ||
+ | echo ' | ||
+ | echo ' | ||
+ | # Commande glade2script | ||
+ | echo " | ||
+ | echo " | ||
+ | |||
+ | {{http:// | ||
+ | {{http:// | ||
+ | |||
+ | ===== Utilisation ===== | ||
+ | Il y a 2 façons d' | ||
+ | |||
+ | ====Interface Statique: | ||
+ | |||
+ | Dans le script principal, on appelle l' | ||
+ | widgets référencés en argument (comme le fait **zenity** par exemple ) | ||
+ | #/bin/bash | ||
+ | SORTIE_GUI=$(glade2script -g ./ | ||
+ | echo “$SORTIE_GUI” | ||
+ | #Résultat: | ||
+ | _entry1_get_text=”texte saisie dans l' | ||
+ | EXIT=”ok” | ||
+ | | ||
+ | ====Interface dynamique: | ||
+ | |||
+ | Des traitements seront réalisés en réaction à l' | ||
+ | Pour lancer la machine, il suffit de créer un petit script où se trouve la commande glade2script. | ||
+ | On peut mixer les deux, utilisation dynamique et récupération des variables en sortie quand même, selon les besoins. | ||
+ | |||
+ | Cela peut paraître compliqué, mais ca ne l'est pas du tout à l' | ||
+ | |||
+ | ====Petit exemple: | ||
+ | Je veux, depuis mon script, lancer une boite de dialogue avec une question et 2 boutons, un pour valider l' | ||
+ | Il faut d' | ||
+ | Dans les signaux des boutons, renseigner pour le signal clicked => on_clicked | ||
+ | Donner un nom explicite aux boutons, ici, btn_ok, btn_no | ||
+ | C'est le nom que les fonctions porteront dans le script associé. | ||
+ | |||
+ | Le script associé au glade et portant le même nom. | ||
+ | #! /bin/bash | ||
+ | PID=$$ | ||
+ | FIFO=/ | ||
+ | mkfifo $FIFO | ||
+ | function btn_ok() | ||
+ | { | ||
+ | echo ' | ||
+ | } | ||
+ | function btn_no() | ||
+ | { | ||
+ | echo ' | ||
+ | } | ||
+ | # La boucle imbriquée qui suit est le coeur du système de | ||
+ | # communication entre GTK et bash. | ||
+ | # Elle devra toujours se trouver en bas du script associé au | ||
+ | # glade. Vous n'avez pas à vous en soucier, mais il y est possible | ||
+ | # d' | ||
+ | # d' | ||
+ | while read ligne; do | ||
+ | if [[ " | ||
+ | eval ${ligne#*@} | ||
+ | echo "DEBUG => in boucle bash :" ${ligne#*@} | ||
+ | else | ||
+ | echo " | ||
+ | | ||
+ | fi | ||
+ | done < <(while true; do | ||
+ | read entree < $FIFO | ||
+ | [[ " | ||
+ | echo $entree | ||
+ | done) | ||
+ | Votre script maintenant : | ||
+ | #! /bin/bash | ||
+ | # Déroulement de votre script | ||
+ | # 2 façons de récupérer le résultat, soit par le code de sortie | ||
+ | # ou en chargeant la variable EXIT dans l' | ||
+ | # le résultat. | ||
+ | if glade2script -g ./ | ||
+ | echo “le bouton ok a été clické” | ||
+ | else | ||
+ | echo “le bouton no a été clické” | ||
+ | fi | ||
+ | # | ||
+ | # | ||
+ | # deuxième méthode, charger la variable EXIT | ||
+ | GUI=$(glade2script -g ./ | ||
+ | eval “${GUI}” | ||
+ | If [[ “${EXIT}” == “yes” ]]; then | ||
+ | echo “le bouton ok a été clické” | ||
+ | else | ||
+ | echo “le bouton no a été clické” | ||
+ | fi | ||
+ | # Il est possible de faire différent, à savoir qu'en sortie, | ||
+ | # il y a EXIT=”yes” ou EXIT=”no”, | ||
+ | # selon le choix de l' | ||
+ | |||
+ | =====Quelques précautions: | ||
+ | ====Général: | ||
+ | - Les * combinés avec les commandes HIZO peuvent poser problèmes, elles seront interprétées dans le shell bash. | ||
+ | Indiquer la commande set -f avant la boucle de fin pour y remedier, set +f pour inverser le comportement. | ||
+ | |||
+ | ====Glade: | ||
+ | - Les widgets qui doivent être modifiés, ou dont les valeurs seront récupérées via le script associé, devront commencer par _ pour être référencés. | ||
+ | - Les windows, statusbars, eventbox, treeviews et GtkAboutDialog n'ont pas besoin d' | ||
+ | - Par défaut, la visibilité d'une fenêtre est sur non, basculer cette option pour la voir au lancement de votre soft. | ||
+ | |||
+ | ====Widgets Gtk:==== | ||
+ | - AboutDialog: | ||
+ | |||
+ | Commandes glade2script: | ||
+ | - Les commandes GET@ et SET@ s' | ||
+ | |||
+ | ====Script associé: | ||
+ | - Il faut utiliser l' | ||
+ | - Les sauts de ligne s' | ||
+ | - Tous les echo du script associé passeront par le script python qui gère GTK(glade2script), | ||
+ | - En cas d' | ||
+ | - En cas d' | ||
+ | - Pour un affichage en console sans passer par le script python, il suffit de rediriger vers un autre fd. | ||
+ | exec 4>$(tty) | ||
+ | echo 'un truc qui ne passera pas par python' | ||
+ | #Penser à refermer le fd en fin de script: | ||
+ | exec 4<&- | ||
+ | |||
+ | < | ||
+ | Le PID de glade2script et du terminal sont accessibles via une commande GET@ | ||
+ | GET@glade2script_PID et GET@terminal_PID</ | ||
+ | |||
+ | ====Signaux Gtk et callback==== | ||
+ | |||
+ | **Dans le glade**, pour chaque widget auquel vous voulez associer une action, il faut renseigner un signal. Ce signal, auquel on aura assigné un callback, lancera une fonction du script associé correspondant au nom du widget, avec un argument. | ||
+ | |||
+ | Quelques callbacks n'ont pas de retour, ils agissent directement sur l' | ||
+ | |||
+ | Il peut être utile de renseigner les données utilisateurs. Le widget renseigné dans ces données, lancera le callback. | ||
+ | Par exemple, si on renseigne, en données utilisateur un widget entry sur le signal d'un bouton, | ||
+ | Les données utilisateurs sont aussi nécessaire au fonctionnement des callbacks qui agissent directement sur l' | ||
+ | |||
+ | ===Callbacks qui lancent une fonction avec argument: | ||
+ | FIXME | ||
+ | ===Callbacks sans retour: | ||
+ | FIXME | ||
+ | ===Détails callback=== | ||
+ | Les signaux, lorsqu' | ||
+ | FIXME | ||
+ | |||
+ | ====Commandes pyGtk==== | ||
+ | Les commandes pyGtk agissent sur un widget, modifient sa valeur, sa taille, etc,etc ... | ||
+ | Vous trouverez ces commandes dans la doc pyGTK (dans devhelp, installer avec glade sous Lucid, The gtk Class Reference). | ||
+ | Une grande partie de ces commandes ne nous sont pas nécessaires/ | ||
+ | |||
+ | Pour lancer les commandes pyGtk depuis le script associé, il faut passer par des commandes glade2script. | ||
+ | |||
+ | ====Commandes glade2script==== | ||
+ | FIXME | ||
+ | |||
+ | =====Voir aussi===== | ||
+ | * [[http:// |