Programmer une fenêtre de déconnexion en langage Python

Bonjour,

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 :

Bitte ausw_007

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 :

Abmeldungsfenster_009

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 :

  1. Détecter la langue du système, (la « locale » comme on dit) et afficher les textes en conséquence.
  2. 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.
  3. 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, à tel point que depuis ce matin, je n’arrête pas d’éteindre et de rallumer mon ordinateur… Jour… Nuit… Jour… Nuit… Jour… Nuit…

 

Python: Variables et espaces de noms

Pour une lecture plus agréable (page plus large), je vous invite à cliquer sur ce lien et à lire ce chapitre dans la rubrique consacrée au langage Python.

Introduction

Dans le chapitre précédent, nous avons pu constater que grâce à la programmation orientée objet, deux développeurs, Briface et Jobriel, pouvaient coder un module chacun de leur côté et que ces deux modules pouvaient être « assemblés » in fine pour donner naissance au programme de notre choix. Continuer à lire … « Python: Variables et espaces de noms »

#Python : classes et méthodes (partie 2) – mise en pratique

Pour une lecture plus agréable (page plus large), je vous invite à cliquer sur ce lien et à lire ce chapitre dans la rubrique consacrée au langage Python.

Nous allons confier à deux programmeurs en herbe, Briface et Jobriel, le soin de rédiger le code d’une petite application à caractère pédagogique. Elle consiste à faire apparaître des formes générées aléatoirement. Continuer à lire … « #Python : classes et méthodes (partie 2) – mise en pratique »

Python : classes et méthodes (partie 1), avec un peu de menuiserie en prime.

Pour une lecture plus agréable (page plus large), je vous invite à cliquer sur ce lien et à lire ce chapitre dans la rubrique consacrée au langage Python.

En programmation orientée objet (POO) et notamment dans le langage Python, tout est objet ! En fait, c’est un peu comme dans le monde réel… Nous sommes entourés d’objets de toutes sortes. Continuer à lire … « Python : classes et méthodes (partie 1), avec un peu de menuiserie en prime. »

Python : les fichiers (3/3) – La sérialisation des données avec le module pickle

Pour une lecture plus agréable (page plus large), je vous invite à cliquer sur ce lien et à lire ce chapitre dans la rubrique consacrée au langage Python.

Dans ce chapitre, nous allons découvrir un module très intéressant puisqu’il permet d’enregistrer des données dans un fichier binaire et de les restituer ultérieurement avec leur type initial. Continuer à lire … « Python : les fichiers (3/3) – La sérialisation des données avec le module pickle »

Python: les fichiers (2/3) – le module os

Pour une lecture plus agréable (page plus large), je vous invite à cliquer sur ce lien et à lire ce chapitre dans la rubrique consacrée au langage Python.

Lorsque j’ouvre un fichier en mode écriture et que ce dernier n’existe pas, alors il est créé dans le répertoire courant, c’est-à dire à l’endroit ou le script est lancé. Prenons un exemple concret. Continuer à lire … « Python: les fichiers (2/3) – le module os »

Python: les fichiers (1/3)

Pour une lecture plus agréable (page plus large), je vous invite à cliquer sur ce lien et à lire ce chapitre dans la rubrique consacrée au langage Python.

Introduction

Dans le chapitre 2, nous avons vu que les variables étaient des objets comparables à des tiroirs dans lesquels on pouvait déposer des données de différents types (nombres entiers, chaînes de caractères, etc…). Mais lorsque nous fermons notre programme, ces variables qui sont créées dans la RAM, c’est-à dire la mémoire vive de l’ordinateur, disparaissent corps et âmes. Il ne sert donc à rien d’y stocker des données que l’on souhaite conserver après la fermeture du programme puisque de toute façon, elles seront perdues. Comment faire alors? Continuer à lire … « Python: les fichiers (1/3) »