Miamondo : Programmer une fenêtre de déconnexion en langage Python
samedi 6 janvier 2018 à 14:20Salut la compagnie,
Il y a quelques semaines, j’avais récupéré sur internet une fenêtre de déconnexion fabriquée grâce à la bibliothèque Pygtk. Voici à quoi elle ressemblait :
Elle possédait toutes les fonctions (« Mise en veille », « Redémarrer », « Éteindre » etc…) mais son design triste comme un jour de pluie ne me satisfaisait point. L’honnêteté m’oblige même à vous dire que je trouvais ça vilain comme tout. Comme cela fait plusieurs mois que je n’ai pas programmé en Python, je me suis dit qu’instancier ma propre fenêtre de déconnexion serait peut-être un bon exercice. Ça me dégourdirait les neurones.
Ni une ni deux, j’ai ouvert mon éditeur de texte et hop! après plusieurs heures de labeur, j’ai obtenu quelque chose qui me contente :
J’ai déposé le tout sur framagit : https://framagit.org/Ordinosor/logout-window
Le code est ici.
Le cahier des charges
Je m’étais donné trois objectifs :
- Détecter la langue du système, (la « locale » comme on dit) et afficher les textes en conséquence.
- Remplacer chaque icône par le texte correspondant à la fonction du bouton, à chaque fois que le curseur de la souris survole une des cinq icônes. Effectuer l’opération inverse à chaque fois que le curseur quitte une des cinq icônes.
- Centrer la fenêtre au milieu de l’écran.
Détecter la langue du système
- Importation du module locale,
- Lignes 62 à 96 :
self._locale = locale.setlocale(locale.LC_ALL, "")[0:2]
- la variable self._locale stocke les deux premiers caractères de la langue détectée (« en », « fr », « de » etc…)
- Ensuite, j’ai créé une liste de trois listes contenant les traductions des boutons en allemand, en anglais et en français. À l’aide d’une condition if-elif-else, c’est la langue détectée qui sera utilisée.
- Si la variable self._locale stocke les initiales d’une autre langue (par exemple le patois vendéen), la fenêtre sera en anglais car c’est la langue que j’ai définie par défaut. Vous devez bien vous douter que je ne vais pas m’amuser à traduire cette application dans tous les idiômes de la Terre!
Remplacer chaque icône par le texte correspondant à la fonction du bouton au survol de la souris (et le contraire pour l’opération inverse)
- Lignes 175 à 194 : J’ai lié les boutons aux événements <« Enter »> et <« Leave »>
- Ligne 48 : J’ai reconfiguré le bouton survolé pour faire disparaitre l’image et la remplacer par le texte. C’est là que j’ai eu un petit problème:
event.widget.config(image="", text=self.button_name...)
.
- Comme vous pouvez le constater, il a fallu d’abord que j’affecte une chaîne de caractères vide à l’option image avant de configurer l’option text sinon ça ne fonctionnait pas.
Centrer la fenêtre au milieu de l’écran
- Lignes 105 à 116: Ça n’a pas été simple. J’ai déniché un bout de script qui fait le boulot mais j’avoue que j’ai du mal à comprendre la formule mathématique. On récupère les dimensions de l’écran auxquelles on retranche les dimensions requises pour afficher le widget, le tout divisé par deux. J’ai traduit le commentaire en français pour celles et ceux que ça intéresse.
Conclusion
Je suis content de m’être replongé dans le langage Python. Il est clair que le code mérite d’être retravaillé pour le rendre plus concis mais malgré tout, le résultat me donne entière satisfaction, à telle point que depuis ce matin, je n’arrête pas d’éteindre et de rallumer mon ordinateur… Jour… Nuit… Jour… Nuit… Jour… Nuit…
Original post of Miamondo.Votez pour ce billet sur Planet Libre.
Articles similaires
- Miamondo : #Python : classes et méthodes (partie 2) – mise en pratique (21/06/2017)
- Miamondo : Python : classes et méthodes (partie 1), avec un peu de menuiserie en prime. (17/06/2017)
- Asher256 : Script Linux: Trouver Facilement le Nom d’un Fichier Exécutable (08/01/2009)
- Asher256 : Script pour GNU/Linux : lancer un logiciel X (graphique) avec un utilisateur n’ayant pas le droit (31/08/2008)
- Miamondo : #Python: Les références partagées et le module copy (16/02/2017)