Un environnement de bureau tout en Python (acte II : le fond d’écran)

bureau 2_015
Fond d’écran de mes deux moniteurs avec rafraîchissement aléatoire

 

Edit du 21 avril 2019 : le projet continue mais désormais le dépôt se trouve ici: 

Cet article est donc caduc. Le dernier article du projet est ici:

 

Bonjour,

Après le premier épisode où je vous avais présenté le menu principal, me voici de retour! Et cette fois-ci, j’ai dans mon baluchon,  trois scripts qui génèrent :

  • un fond d’écran avec une image fixe
  • ou bien un fond d’écran choisi au hasard dans un répertoire et remplacé par un nouveau fond d’écran à une fréquence choisie par l’usager, par exemple toutes les dix minutes.
  • Une fenêtre permettant à l’usager de faire son choix.

Je signale également que les scripts détectent le nombre d’écrans grâce à xrandr. C’est bien pratique lorsqu’on en a deux , ce qui est mon cas.

Avant de commencer, je voulais juste vous préciser que j’ai apporté quelques modifications au menu principal en supprimant toutes les fenêtres de dialogues proposées par Tkinter. Je ne les trouve pas très esthétiques. Par conséquent, je les ai remplacées par des fenêtres faites par mes soins. Le menu principal fonctionne bien. J’en suis tout à fait satisfait. Il subsiste quelques petits bugs que je pourchasse sans relâche mais globalement, ça tient la route. @PengouinPdt  m’a apporté son aide très appréciable, notamment au niveau de la structuration et de la présentation du code. Je tiens ici à le remercier. Les prochaines modifications porteront sur l’ajout de fonctionnalités plus esthétiques (glisser-déposer, transparence etc…) et aussi sur l’amélioration du code (utilisation de dictionnaires).

 

Ce diaporama nécessite JavaScript.

Mais revenons à ce qui nous intéresse aujourd’hui, à savoir le grand déballage national le fond d’écran en Python. Le script qui permet à l’usager de faire son choix se nomme select_wallpaper.py. J’ai créé un lanceur intitulé arrière-plan dans le fichier /usr/share/applications. Voici le fichier de ce lanceur.

sélection_001

Ce dernier ouvre une modeste fenêtre qui, j’en conviens tout à fait, mérite d’être améliorée esthétiquement :

 

Ce diaporama nécessite JavaScript.

À partir de là, vous avez le choix entre :

  • un défilement aléatoire avec rafraîchissement à une fréquence choisie par l’usager (wallpaper.py)
  • ou bien une image fixe (wallpaper2.py).

Comme je l’ai dit, les deux scripts sont capables de détecter le nombre d’écrans grâce à xrandr et d’ajuster le papier peint de bâbord à tribord (voir à partir de la ligne 84 du fichier wallpaper.py). Il faut que l’écran supplémentaire soit à tribord. Si vous avez un écran à bâbord ou au-dessus de votre écran principal, cette fonctionnalité est inopérante. Pourquoi donc? Parce que je ne l’ai pas encore codée, pardi! Ça me vient tout juste à l’esprit.

J’ai bien évidemment supprimer toutes les décorations de fenêtre grâce à cette commande :

[code language=python]self.root.overrideredirect(1)[/code]

Pour déclencher le papier peint sur les deux écrans, j’utilise des threads, c’est-à-dire la programmation parallèle. Normalement, en version aléatoire, les deux images sont identiques… sauf que parfois ça titube un peu et pour une raison que je ne m’explique pas, une fois rafraîchies, les deux images sont différentes. Bon, je sais que ma fonction random.randint qui pioche une image au hasard, se trouve dans le thread, mais je pensais avoir fait en sorte que cette incongruité ne soit pas un problème. Malheureusement, ll n’en est rien.

Coller l’image sur la sous-couche d’Openbox

Petit souci que j’ai résolu parce que c’était très fâcheux. Lorsque j’ouvrais une ou plusieurs fenêtres et que je cliquais sur le fond d’écran, ces dernières disparaissaient derrière lui! Il me fallait donc trouver une solution pour coller le papier peint au fond de l’écran parce qu’en fait, ce dernier se trouvait juste posé sur la sous-couche grise d’Openbox! 

Eh bien, il suffit de rajouter cette commande et votre image se retrouve plaquée tout en bas de la pile de fenêtres. Elle n’en bouge plus :

[code language=python] self.root.lower( ) [/code]

Attention, dans le script, il ne faut pas qu’elle précède la commande self.root.overrideredirect(1), sinon ça ne fonctionne pas!

bureau 2_015
Fond d’écran de mes deux moniteurs avec rafraîchissement aléatoire
bureau 2_016
Fond d’écran avec image fixe

Exécution au démarrage

Enfin, pour que votre fond d’écran apparaisse au démarrage, il faut le rajouter dans le fichier /home/$USER/.config/openbox/autostart en n’oubliant pas l’esperluette:

[code language=bash]/chemin/vers/wallpaper.py &[/code]

Conclusion

À la deuxième étape de mon projet, j’ai déjà un environnement de bureau fonctionnel et agréable mais le plus dur reste à venir : la barre de tâches et l’iconification des applications. Je ne sais pas comment m’y prendre alors je pense que je vais bien m’amuser. La suite à l’acte III…

P.S. : Je rajouterai une vidéo ce soir.

 

 

4 commentaires sur “Un environnement de bureau tout en Python (acte II : le fond d’écran)

    1. Bonjour Monsieur elicthus,

      J’ai du mal à percevoir ce qui se cache derrière votre commentaire sybillin. Est-ce que ça signifie: « mon petit bonhomme, on a déjà pondu un environnement de bureau en Python 3 qui tient certainement plus la route que ta charrette improbable », ou bien est-ce qu’il s’agit d’une invitation à venir visiter votre site, ce que je viens de faire séance tenante et non sans éprouver une certaine joie à l’idée qu’il existe un tel projet?
      N’ayez pas peur d’être un peu plus prolixe… 🙂
      Cordialement,
      Benoît

Répondre à hucste (@PengouinPdt) Annuler la réponse.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.