Pysimplegui

PySimpleGUI

miamondo Par Le 12/09/2020 à 23:51 comment 5

 Bonjour,

La semaine dernière, alors que j'étais plongé dans le code de mon environnement de bureau fait maison, je me suis demandé s'il existait des alternatives à l'interface graphique Tkinter. Une rapide recherche sur Internet m'a confirmé qu'il en existait plusieurs, plus ou moins difficiles et plus ou moins bien documentées. L'une d'entre elles a tout particulièrement retenu mon attention. Il s'agit de PySimpleGUI.

PySimpleGUI est en grande partie basée sur Tkinter et promet à l'utilisateur, une expérience de programmation graphique d'une simplicité indécente. La structure du code est censée être beaucoup plus intuitive. Séduit par ce discours de bonimenteur, j'ai décidé de voir ce que cet outil avait dans le ventre. J'ai donc remplacé tkinter par PySimpleGUI dans le programme instanciant mon environnement de bureau personnel. Passé l'enthousiasme des premières heures, j'ai vite compris que la simplicité allait s'avérer plus compliquée que prévue. L'expérience n'a pas répondu à mes attentes, ce qui ne signifie pas que l'outil n'a aucun intérêt. C'est juste qu'il ne fonctionne pas.

Mais tout d'abord, laissez-moi vous présenter les bases de ce GUI qui diffèrent de celles de tkinter: 

Avec tkinter, on instancie d'abord la fenêtre mère puis on vient y placer des widgets enfants. C'est-à-dire que la poule précède les oeufs. Cela nous donne:

Code

Tkinter
 

Avec PySimpleGUI, c'est le contraire, on instancie d'abord les oeufs dans un layout ( = agencement) avant de les donner à la poule qui est instanciée en dernier. En clair, l'instanciation des widgets enfants précède celle du widget parent.

Code2

Pysimple


Veuillez noter que la place des accolades dans le layout a toute son importance. Dans le code ci-dessus, les boutons sont agencés sur deux rangées différentes. Si j'eus souhaité que les boutons eussent été sur la même rangée, j'eus écrit ceci :

Code3 1

 

Voici la traduction de ce qu'écrit un membre de l'équipe PySimpleGUI. Le texte original est ici:

Cette fenêtre peut vous sembler "laide", car aucun effort n'a été fait pour la rendre agréable à regarder. Elle est purement fonctionnelle. Il y a 30 éléments dans la fenêtre. Trente éléments. Compte tenu de ce qu'elle fait, c'est miraculeux ou tout au moins incroyablement impressionnant. Pourquoi ? Parce qu'en moins de 50 lignes de code, cette fenêtre a été créée, affichée, a recueilli les résultats et les a affichés dans une autre fenêtre.

50 lignes. Il vous faudra 50 lignes de code tkinter ou Qt pour obtenir les 3 premiers éléments de la fenêtre écrite, si vous voulez faire cela.

Non, soyons clairs ici... cette fenêtre nécéssitera une quantité massive de code en utilisant les GUI conventionnels. C'est un fait et si vous voulez me prouver que j'ai tort, alors faites-le, s'il vous plaît. Veuillez écrire cette fenêtre en utilisant tkinter, Qt, ou WxPython et envoyez le code! Notez que cette fenêtre a même une barre de menu en haut, ce qu'on peut facilement ne pas remarquer.

 

Voici la ci-devant fenêtre:

Ex2

 

Et voici l'image d'un beau melon:

Melon

 

Hein? Non, c'est juste pour faire la transition et enchaîner sur la différence de traitement des images entre les deux GUI. Avec tkinter, il faut utiliser PIL ou Pillow et traiter les images pour que celles-ci puissent être affichées par le GUI.
Avec PySimpleGUI, c'est le Saint-Esprit qui s'en occupe. Vous, vous avez juste à renseigner le chemin de l'image, pourvu qu'elle soit en *.png (comme tkinter), et vous aurez la satisfaction de voir ce beau melon s'afficher sur un bouton par exemple.

Donc, je résume :

  • Une syntaxe plus facile et plus intuitive,
  • Pas de gestionnaire de placement proprement dit (grid() ou pack()). Il suffit de placer les widgets dans des listes,
  • Traitement des images par l'intercession du Saint-Esprit,
  • Une gestion exclusivement commandée par les événements.

Si vous prenez le temps de flâner sur le site de PySimpleGUI, dont les pages curieusement, sont un peu longues à charger, vous découvrirez qu'il est possible de créer des fenêtres sympas, qui, comme il est écrit dans un paragraphe, ne sont pas enlaidies par un design vieillot sorti tout droit des années 90...

 

Ex

 

En ce qui me concerne, après avoir "basculé" mon code sur pysimpleGUI:

  • l'affichage multiécrans s'est transformé en affichage au petit bonheur la chance.
  • Certains boutons du menu principal n'affichent pas les sous-menus.
  • La barre des tâches s'affiche sur un écran mais pas sur l'autre, tandis que le menu s'affiche sur l'écran qui n'a pas la barre des tâches, mais ça dépend. Parfois, c'est le contraire.
  • Les applications s'ouvrent... ou pas. Là encore, ça dépend.
  • Le traitement des images est une catastrophe. Mais ça dépend.

En fait, avec PySimpleGUI, j'ai eu l'impression d'être le témoin privilégié d'une expérience de physique quantique, qui autorise un objet à se trouver de manière aléatoire, dans deux états différents au même instant.

Au bout d'une semaine, j'ai capitulé, je me suis remis à boire et je suis revenu sur la version tkinter de mon environnement de bureau. Même si ce dernier est toujours en chantier, même s'il présente encore de nombreuses imperfections, je l'utilise au quotidien et il est opérationnel (sur deux écrans). PySimpleGUI est, de mon point de vue, une intercouche qui complique inutilement l'utilisation de tkinter, ou qui, pour le dire plus clairement, ne simplifie pas de manière substantielle, la complexité toute relative de tkinter. En tout cas, ce qui est sûr, c'est que la simplicité de PySimpleGUI est bien trop compliquée.

Python GUI Tkinter

  • Aucune note. Soyez le premier à attribuer une note !

Commentaires

  • bidouille

    1 bidouille Le 14/09/2020

    Le problème de PySimpleGUI, c'est son code. Le paradigme a un potentiel incroyable, mais l'implémentation est trop fragile. La documentation est un cauchemar qui reflète très exactement la qualité du code: monolithique, redondant, désordonné, non pythonique, avec une emphase sur des choses superflues (des milliers de "thèmes" en dur!). En bref, une excellente idée mal exploitée et du coup un beau gâchis :(
    miamondo

    miamondo Le 14/09/2020

    Salut,

    Cest exactement ça. Au départ, j'ai été séduit par le concept mais j'ai très vite constaté que l'ensemble était instable, sans parler de la documentation qui est un vrai capharnaüm... Grosse déception

  • Gum

    2 Gum Le 14/09/2020

    Aie ! Au fil de l'article, j'y ai cru un peu , puis beaucoup, puis à la folie, ... et puis pas du tout.
    Merci tout de même !
    miamondo

    miamondo Le 14/09/2020

    Pareil pour moi, mais le concept en soi mériterait d'être retravaillé en profondeur car l'idée de départ est séduisante.
  • gilles

    3 gilles Le 16/09/2020

    Du passé antérieur dans un article tech, ça mérite d'être signalé :)

Ajouter un commentaire

Anti-spam
 
expand_less