Un environnement de bureau tout en Python(Acte III: la barre des tâches)

Bonjour,

Je suis un émotif et de ce fait, je ne peux vous cacher mon immense joie à l’idée d’être enfin parvenu à créer une barre des tâches qui ne fasse pas tache, si je puis me permettre ce lamentable jeu de mots. Je peux vous assurer que cette troisième mission a été la plus ardue mais également la plus riche d’enseignements. Elle m’a demandé tout un tas de recherches sur Linternet, beaucoup de prises de tête mais le jeu en valait la bretelle. Voici donc à quoi ressemble cette barre des tâches :

Vous trouverez une vidéo Youtube en bas de cet article qui vous montre comment tout cela fonctionne. Mais avant, je voudrais revenir sur le menu principal qui s’ouvre en cliquant sur le bouton, tout en bas à gauche. J’ai ajouté une fonctionnalité qui permet d’ouvrir ce dernier à l’emplacement précis de la souris grâce à  un clic droit sur le fond d’écran. J’ai utilisé pour cela, la méthode bind(‘<Button-3>’, self.menu_principal) et aussi event.x , event.y pour déterminer les coordonnées du pointeur de souris.

Ce diaporama nécessite JavaScript.

En ce qui concerne la barre des tâches, elle est composée d’une zone que l’on appelle, me semble-t-il, systray, et qui affiche la date, l’heure et aussi l’icône du gestionnaire de connexions wicd. Pour la date et l’heure, il s’agit d’un bouton qui n’est pas encore connecté mais je vais m’en occuper. Bientôt, ce dernier ouvrira un calendrier-agenda.

À gauche, on trouve la zone des boutons des applications ouvertes. Lorsqu’on ouvre une fenêtre d’application, un bouton apparait instantanément. Il est constitué d’une icône et du nom de l’application. Il permet de réduire et d’agrandir la fenêtre connectée dessus. Un clic droit ferme la fenêtre et supprime le bouton. 

C’est ça qui m’a donné tant de fil à retordre. Dans le module taskbar.py, J’utilise wmctrl -l  à l’intérieur d’une boucle infinie. Toutes les secondes, wmctrl -l liste dans le fichier present_state, les fenêtres ouvertes et compare le résultat obtenu avec la liste n – 1. S’il y a une différence entre les deux listes (une fenêtre supprimée ou rajoutée), il actualise instantanément les boutons et actualise la liste n – 1 contenue dans le fichier previous_state.

Toute la difficulté a été de rendre ce processus lisse, c’est à dire sans hésitation et sans sautillements. Il eût été dommage en effet, de percevoir un flash à chaque actualisation des boutons. C’est ce qui se produisait au tout début. La barre des tâches « flashait ». Outre le fait que ce phénomène était très énervant, il pouvait également s’avérer dangereux pour nos amis les épileptiques.

C’est le fichier launcher.py qui lance les trois applications requises au démarrage. Il est contenu dans le fichier ~/.config/openbox/autostart mais je me demande si je ne devrais pas créer un fichier *.service et l’inclure dans /etc/systemd. Je sollicite votre avis sur cette question.

Vous trouverez tous les modules dans mon dépôt framagit. On verra à l’usage mais il me semble que j’ai créé un système ceinture-bretelles, c’est-à-dire qui tient la route et qui n’est pas instable. Au cours du processus de création, il m’est arrivé à plusieurs reprises, d’engendrer d’incontrôlables boucles infinies laissant apparaître mille fenêtres et seul l’arrêt brutal de Volgor, mon fidèle ordinateur, a empêché la formation d’un trou noir avec toutes les abominables conséquences qui en auraient résulté!

Il me reste encore pas mal de choses à améliorer:

  • un code à nettoyer,
  • des fonctionnalités à rajouter,
  • un esthétisme à moderniser etc…

Par conséquent, dans les semaines qui viennent, je vais vous emmerder vous présenter régulièrement l’évolution de ce projet que je trouve riche d’enseignements. Voilà… Maintenant, place à une petite démonstration en images et sans le son pour vous épargner ma diction hésitante et pâteuse!

 

5 commentaires sur “Un environnement de bureau tout en Python(Acte III: la barre des tâches)

  1. Merci pour ce retour, j’adore ce type de projet !
    J’ai hâte de lire les billets suivants, cela nous change des billets à la con d’autres blogs sur des sujets en carton comme : Kubernetes, la méthode agile, le deep learning et toutes ces conneries.

    J'aime

    1. Merci pour ton commentaire. Même s’il s’écoule trois semaines entre deux articles. je m’efforce, dans la mesure du possible de publier quelque chose qui soit le fruit de mes projets personnels. J’essaie également de montrer que l’informatique et la programmation ne sont pas réservés aux professionnels et aux initiés.
      Bonne soirée.

      J'aime

Répondre

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.