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…

 

7 commentaires sur “Programmer une fenêtre de déconnexion en langage Python

Ajouter un commentaire

  1. Pour le placement de la fenêtre, on veut récupérer la position du point en haut à gauche du pop-up (il me semble que c’est le (0;0), sinon ça ne change rien, le principe est le même). On commence par récupérer le centre de l’écran en divisant par 2 sa résolution. Mais le pop-up est décalé en bas à droite. Du coup, on translate vers la gauche et en haut d’un  » demi pop-up  » sur les 2 axes pour que le centre du pop-up soit au centre de l’écran.
    Si ce que j’ai dit n’est pas clair, fais un schéma :p

    J'aime

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Créez un site ou un blog sur WordPress.com

Retour en haut ↑

%d blogueurs aiment cette page :