Actualités techniques autour de PySimpleGUI
(github.com/PySimpleGUI)- Après avoir mis fin à sa tentative de commercialisation, PySimpleGUI a supprimé les composants de licence et de sécurité du code de PySimpleGUI 5, puis a été republié sur GitHub et PyPI sous la forme de PySimpleGUI 6 avec une licence LGPL3
- La dernière version peut être installée avec
python -m pip install PySimpleGUI, et l’ancienne version4.60.5.1, la branchemastersur GitHub ou une version spécifique comme6.1peuvent aussi être installées directement avec pip - PySimpleGUI est présenté comme un wrapper de bibliothèques GUI telles que tkinter, qui transforme les SDK GUI en une structure plus simple et plus compacte tout en offrant une personnalisation fine, sans nécessiter d’expérience préalable en programmation GUI
- La version 6.2 inclut une correction de bug de
Window.settings_save, l’affichage inline d’images dans Multiline,psgupgrade, la sélection programmatique de nœuds Tree, des minuteurs sous forme de chaîne"H:M:S"pourWindow.start_timer, le réglage de la couleur de bordure des Frame, etc. - Le projet est maintenu sans accepter de pull requests ; son avenir à long terme est incertain, mais l’auteur indique vouloir continuer à écrire du code et à organiser l’écosystème
La remise en open source de PySimpleGUI 6
- PySimpleGUI a tenté une commercialisation, mais n’a pas réussi à générer les ressources nécessaires pour maintenir le projet au niveau espéré
- En février 2025, la fermeture de PySimpleSoft et la poursuite du support jusqu’à fin 2025 ont été annoncées ; il restait ensuite à décider quoi faire du code, de la documentation et des dépôts
- Le code de PySimpleGUI 5 a été publié sur GitHub et PyPI après suppression des composants de licence et de sécurité
- La nouvelle version publique utilise une licence LGPL3
- Le cours Udemy sera disponible gratuitement pendant un certain temps, avec le code promo
033334A16163C571B739
Méthodes d’installation
- Installer la dernière version v6 depuis PyPI :
python -m pip install PySimpleGUI
- Installer l’ancienne version
4.60.5.1:python -m pip install PySimpleGUI==4.60.5.1
- Le code le plus récent du dépôt GitHub peut être installé directement :
python -m pip install --upgrade https://github.com/PySimpleGUI/PySimpleGUI/zipball/master
- Pour installer une version précise depuis GitHub, remplacer
masterpar le numéro de version :python -m pip install --upgrade https://github.com/PySimpleGUI/PySimpleGUI/zipball/6.1
- Il est aussi possible de cloner ou télécharger le dépôt puis d’effectuer une installation locale :
python -m pip install .
Le rôle de PySimpleGUI
- PySimpleGUI est un wrapper autour de tkinter et d’autres bibliothèques GUI
- Il transforme les SDK GUI en une structure plus simple et plus compacte tout en offrant une personnalisation fine
- Il est présenté comme ne nécessitant pas d’expérience préalable en programmation GUI
- L’exemple du README construit une application de fenêtre interactive avec seulement
Text,Input,Button,Window, une boucle d’événements,window.read()etwindow.close() - La documentation est disponible sur Docs.PySimpleGUI.com
Mode de développement et perspectives à long terme
- PySimpleGUI est décrit comme ayant été développé d’une manière plus proche d’un produit propriétaire que d’un projet open source traditionnel
- Les pull requests ne sont pas acceptées
- L’avenir à long terme n’est pas certain, mais l’auteur actuel apprécie d’écrire du code et d’aider les autres
- L’expérience PySimpleGUI est décrite comme une expérience “once-in-a-lifetime”, car elle a permis de voir ce que les gens ont créé
Fonctionnalités et corrections de la version 6.2
- La version 6.2 inclut une correction de bug de
Window.settings_save - Une fonctionnalité a été ajoutée pour “print” des images inline dans l’élément Multiline
- La fonctionnalité de mise à niveau vers la dernière version de maintenance est de nouveau intégrée à PySimpleGUI
- Il est possible d’utiliser la Home Window ou la commande
psgupgrade - Les notes de version peuvent être consultées et une nouvelle version peut être installée
- Il est possible d’utiliser la Home Window ou la commande
- Le bug #5750, où les événements
Graphentraient dans une boucle infinie à la réception d’événementswrite_event_value, a été corrigé- La correction consiste à effacer le flag de bouton en temps réel
- Il est indiqué que le risque de régression est faible, car la portée du changement se limite à la condition de l’élément Graph
- Le paramètre
select_node_keysa été ajouté àTree.update, permettant de sélectionner des nœuds d’arbre par programmation comme si l’utilisateur les avait sélectionnés - La fonctionnalité et le paramètre
echo_stdout_stderrde Multiline ont été corrigés- L’écho ne se fait que si stdout ou stderr a été redirigé vers cet élément
- Cette fonctionnalité n’effectue pas elle-même la redirection
- La correction #6686 résout un problème où le bouton Calendar chooser effaçait un champ qui ne devait être vidé qu’au moment du retour de
window.read - Le numéro de version de la release de maintenance est affiché dans la Home Window et la position du bouton d’installation a été déplacée
- Lors de l’appel à
Window.start_timer, il est possible de définir un minuteur sous forme de chaîne"H:M:S" - Une fonctionnalité prenant uniquement en charge le défilement horizontal a été ajoutée aux éléments Column défilables
- Les paramètres
border_coloretborder_width_no_reliefont été ajoutés à l’élément Frame, permettant de définir la couleur de la bordure- Si aucune configuration distincte n’est fournie, la couleur de bordure d’une Frame utilise par défaut la couleur de l’élément texte
- La section de référence des appels de la documentation a été mise à jour pour la version 6.2
Glisser-déposer et projets connexes
- Le glisser-déposer est décrit comme une fonctionnalité attendue de longue date, et une méthode pour l’implémenter dans l’espace du code utilisateur, sans modifier le code de PySimpleGUI, aurait été trouvée
psgdndest un nouveau package qui ajoute le glisser-déposer à PySimpleGUI- Il peut être installé et utilisé via pip
- Davantage d’informations et d’exemples se trouvent dans le dépôt correspondant
psgdnd6.0.1 a été publié sur PyPI et fonctionne sous Windows- La version 6.0.2 sur GitHub inclut les corrections nécessaires pour Linux
- L’état du support Mac n’est pas encore connu
- Le dépôt
PSGMicroPythonajoute du code pour s’interfacer avec des microcontrôleurs basés sur MicroPython- Il fonctionne avec Raspberry Pi Pico et ESP32
- Il pourrait fonctionner avec d’autres cartes
- Il n’est pas conçu comme un projet robuste ou de grande ampleur, mais comme du code qui peut être utile
Prototype PSGWeb
- PSGWeb est un prototype qui exécute PySimpleGUI dans une fenêtre de navigateur
- Il fonctionne avec la plupart des programmes de démonstration
- En ajoutant
psgweb.usdevant l’URL d’une application PySimpleGUI sur GitHub, il est possible d’essayer de l’exécuter- Exemple :
https://github.com/PySimpleGUI/PySimpleGUI/… - Exemple transformé :
https://psgweb.us/github.com/PySimpleGUI/…
- Exemple :
- PSGWeb a été créé dans le cadre du travail plus large sur PSG 5, mais n’a pas été publié
- Il n’est pas prévu de publier ni d’étendre ce prototype
Position sur l’usage de l’IA
- L’auteur utilise les LLM pour rechercher et résumer de la documentation, rechercher des erreurs, enquêter et acquérir des connaissances
- Il n’écrit pas de code avec des LLM
- La raison donnée est simplement qu’il aime écrire du code
- Il explique aussi que s’il n’a pas ouvert le projet aux pull requests, c’est parce qu’il voulait écrire le code lui-même plutôt que de laisser d’autres personnes le faire
- Quant à la pertinence de PySimpleGUI à l’ère de l’IA, il estime qu’il suffit que des personnes découvrent, installent et utilisent PySimpleGUI chaque jour, ne serait-ce qu’une seule
- L’auteur dit qu’il lui est difficile d’imaginer créer des applications Windows sans PySimpleGUI
- Il explique avoir récemment construit un analyseur de bus pour un ordinateur 6502 sur breadboard, avec deux Raspberry Pi Pico et une application PySimpleGUI
- Il dit avoir pu créer facilement avec PySimpleGUI une application frontend sous Windows pour contrôler l’outil
Histoire du projet et problèmes de financement
- PySimpleGUI a commencé en 2018 comme du code ponctuel créé parce qu’une GUI était nécessaire pour un prototype de lecteur multimédia
- L’objectif était d’envelopper Tkinter d’une manière plus linéaire et intuitive, afin d’obtenir rapidement quelque chose de fonctionnel sans expérience des frameworks GUI orientés objet
- L’auteur l’a publié sur GitHub sans expérience de Python ni de l’open source, et a abordé le projet davantage comme une startup que comme un projet open source traditionnel
- Chronologie :
- Juillet 2018 : Version 1
- Juin 2019 : Version 4
- Janvier 2020 : le financement devient une préoccupation majeure et la commercialisation est évoquée
- Novembre 2020 : annonce du cours Udemy et ajout d’une demande d’aide publique
- Décembre 2021 : lancement du cours
- Février 2024 : lancement commercial de la Version 5
- Avril 2026 : Version 6
- L’Announcements Issue sur GitHub a été utilisé comme un blog conservant l’historique du projet, et a dépassé les 1 700 entrées
- Pour faciliter la lecture, un instantané a été publié dans l’onglet Announcements 2018-2024 de la documentation
- Le travail open source à temps plein a créé une pression financière immédiate et continue
- Les parrainages et dons via GitHub Sponsors et Buy Me a Coffee ont atteint, même au plus haut, environ 150 dollars par mois
- Le cours Udemy de 61 leçons et 11,5 heures est brièvement monté à environ 2 000 dollars par mois au début, avant de tomber sous les 100 dollars
- Aucune des deux approches n’a été suffisante pour maintenir le projet sur le long terme
Résultats de la commercialisation et expérience de licence
- Le lancement payant de la Version 5 n’a pas été une décision soudaine : il avait été discuté publiquement pendant des années dans le README et les annonces
- Début 2024, après avoir épuisé les autres options, la version commerciale a été lancée
- L’objectif était de maintenir l’accessibilité plutôt que d’ériger des barrières
- Du point de vue de la viabilité financière, cela n’a pas bien fonctionné, mais en termes d’expérience, d’apprentissage et de relations, l’auteur estime que cela en valait la peine
- Après la commercialisation, PySimpleGUI n’a pas perdu la plupart de ses utilisateurs, et de nombreuses entreprises ont continué à l’utiliser
- Le problème était de convaincre les entreprises d’acheter des licences
- Le choix s’est porté sur une Hobbyist License, dans laquelle les utilisateurs amateurs et les étudiants pouvaient l’utiliser gratuitement, tandis que les entreprises devaient payer
- En pratique, la grande majorité des utilisateurs se sont identifiés comme amateurs
- Des dizaines de milliers d’utilisateurs en entreprise se sont inscrits au niveau gratuit, et il n’était pas rare que de grandes entreprises comptent des centaines d’utilisateurs mais seulement quelques licences payantes
- L’auteur indique ne pas regretter la décision d’avoir proposé une option gratuite
- Sa conclusion personnelle est qu’il existe une forte attente culturelle selon laquelle les outils et bibliothèques Python devraient être gratuits
- Le prix ou les plaintes ne semblaient pas être le cœur du problème ; les gens continuaient à utiliser PySimpleGUI, mais ne ressentaient pas l’obligation de payer
- Même des conditions de licence claires n’ont pas toujours modifié les comportements
Licence actuelle
- La mention de copyright est
Copyright 2018-2026 PySimpleGUI. All rights reserved. - La licence actuelle est LGPL3
1 commentaires
Avis sur Hacker News
Au travail, je devais enregistrer mon temps de travail dans Jira, mais je n’aimais pas devoir garder le site web ouvert en permanence, et le processus consistant à trouver le ticket sur lequel je travaillais, trouver le lien d’enregistrement du temps et ajouter un commentaire était lent.
Je voulais une application desktop avec la liste des tickets qui m’étaient assignés et des boutons pour ajouter un commentaire/du temps de travail. Avec Tkinter, j’ai longtemps galéré à obtenir quelque chose de joli, mais après avoir découvert PySimpleGUI, j’ai pu y raccorder les hooks de l’API Jira et créer ce que je voulais ; c’était un bon projet pour apprendre le développement d’UI.
Un ami m’a aussi dit qu’à l’un de ses postes il avait créé un client Qt interne pour les opérations Jira de base, et quand j’ai dû suivre mon travail avec Jira, j’ai utilisé https://github.com/go-jira/jira pour gérer les changements via plusieurs scripts console.
Ces frameworks GUI me semblent vraiment prometteurs. Une expérience desktop native est bien meilleure qu’un assemblage de webviews, et la boucle d’événements simplifiée de PySimpleGUI ainsi que son approche multi-backends me semblent réellement nouvelles.
Cela dit, je me demande pourquoi il n’existe pas davantage de « GUI automatiques » auxquelles on fournirait simplement des structures de données et des fonctions, et qui généreraient automatiquement une interface adaptée pour les manipuler. En choisissant par heuristique si les panneaux doivent être verticaux/horizontaux, sous forme d’onglets ou de pop-ups, on pourrait ouvrir beaucoup de fonctionnalités trop imbriquées pour une CLI et trop natives pour en faire une appli web.
https://github.com/chriskiehl/Gooey
On peut définir une structure et la passer à la fonction
dialog, qui génère automatiquement une boîte de dialogue adaptée aux champs de la structure et appelle un callback lorsque l’utilisateur clique sur OK. Des attributs personnalisés permettent aussi de spécifier quel widget utiliser : par exemple, si l’on ajoute@ControlledBy!VerticalSlider(0, 100)à unint, on obtient un curseur de 0 à 100 au lieu d’un champ de saisie numérique. On peut aussi annoter des fonctions de menu avec quelque chose comme@menu("Search") Find(string text) { ... }pour générer automatiquement le menu et la boîte de dialogue, et il existe aussi unDataControllerWidgetqui appelle un callback à chaque événement de changement. J’ai écrit un article à ce sujet il y a quelques années, mais ça avance très lentement : http://dpldocs.info/this-week-in-d/Blog.Posted_2020_11_02.ht...C’est assez intéressant pour que j’aie envie d’y consacrer plus de temps, mais comme je n’en ai pas l’usage dans mon travail principal, je n’y touche que par petites sessions le week-end quand j’ai envie de coder.
L’esthétique des exemples semble tout droit sortie des années 90, comme [0]. C’est parfait pour du prototypage ou des outils internes destinés à des gens qui ne peuvent pas utiliser une CLI, mais je me demande quoi faire quand on a besoin d’une UI agréable à regarder.
Côté performances, une UI native est toujours préférable, mais j’ai toujours trouvé qu’elle était plus difficile à styliser qu’une page web. Je me demande quel est, dans les GUI Python, l’équivalent de bibliothèques de composants stylisés qui paraissent modernes sans gros effort, comme Flutter ou SwiftUI.
[0] https://raw.githubusercontent.com/PySimpleGUI/PySimpleGUI/ma...
Au minimum, le style d’UI par défaut fourni par le système d’exploitation permet aux gens de transférer ce qu’ils ont appris d’une appli à une autre. Comme je ne suis pas un excellent designer d’UI, il y a de fortes chances que les valeurs par défaut du système soient meilleures que ce que je pourrais imaginer. Ajoutez à cela la phrase que le marketing redoute d’entendre — « notre logiciel a l’air vieux » — et les coûts de développement augmentent jusqu’à un niveau déjà difficile à supporter.
Il existait bien ce genre de logiciels dans les années 90, mais ce n’est pas l’esthétique des années 90 dont les gens parlent généralement. Beaucoup d’efforts ont été consacrés au design de l’UI de Windows 95.
Je déteste davantage les UI modernes avec leurs grands espaces vides, leurs boutons qui ne ressemblent pas à des boutons, leurs barres de défilement qui disparaissent et leurs menus hamburger.
La séparation frontend/backend est également acquise par défaut, et un accès distant est possible plus tard si nécessaire. Si l’on veut une expérience proche d’une appli native, il suffit de mettre un bouton « Open browser UI » dans une petite GUI de type Tkinter. Si le bouton de lancement place un jeton dans l’URL, on peut même se protéger d’un démon lancé par un autre utilisateur sur la même machine, même si je n’ai jamais vu personne faire réellement cela.
SystemDefaultForReal, les widgets Windows natifs ont une apparence moderne, mais Tkinter n’a pas du tout été mis à jour et paraît décalé.Ça a l’air correct. Cela dit, même si cette bibliothèque est déjà mature et que de gros changements peuvent être difficiles, ce serait bien d’utiliser des dictionnaires plutôt que des listes. Les dictionnaires Python récents conservent l’ordre d’insertion
Dans un ancien poste, j’avais créé quelque chose de similaire par-dessus PyQt, avec un wrapper beaucoup plus fin, et le code était étonnamment réduit. La différence essentielle était qu’il gérait à la fois la configuration des propriétés/signaux et l’imbrication des widgets. Par rapport à une approche où l’on définit les propriétés dans le constructeur, l’avantage était de pouvoir les définir dans le corps de la définition de la vue, même si l’on avait besoin du nom du widget plus tard pour changer le texte. Une seule fonction
setup_viewconstituait toute l’API, et c’était assez pratique pour créer rapidement de petites interfaces graphiques. Cette bibliothèque semble aussi être une bonne alternative, merci de l’avoir partagéehttps://docs.python.org/3/whatsnew/3.7.html#summary-release-...
Il vaut mieux laisser le framework gérer le data binding. Le Web comme le desktop vont de plus en plus dans cette direction. Plutôt que de modifier directement les widgets, il faut lier leurs propriétés à un magasin de données et déclencher un nouveau rendu automatique en cas de changement. Les exemples d’entrée/sortie de la page montrent quelque chose de similaire. Plus personne n’utilise
getElementById()désormaisOn dirait que cela se rapproche de la facilité d’utilisation de VB6 ou de Delphi/Lazarus. Il y a clairement des progrès, et il ne manque plus qu’un constructeur de GUI interactif permettant de
#importles formulaires créés et de les utiliser directementIl y a quelques années, j’ai perdu énormément de temps sur un projet en essayant d’utiliser WxPython avec WxFormBuilder. Le moindre petit changement dans un formulaire cassait tout le backend, et même après avoir écrit moi-même une fine couche de liaison intermédiaire, tout a de nouveau cassé quand j’ai changé le type d’un champ. Je suis content de voir qu’ici ce genre de chose ne devrait pas arriver
En tant que personne qui développe une application GUI Python [1], je pense que le plus gros problème quand on utilise Python pour des applications desktop est le packaging
Les outils existants pour produire des binaires distribuables cessent de fonctionner dès qu’il y a plus que quelques dépendances, ou nécessitent des bidouilles non négligeables. Même avec des paquets populaires, on se retrouve avec des problèmes obscurs comme des imports cachés manquants ou des fichiers de données oubliés dont on ignorait l’existence. Le chargement dynamique de modules peut aussi casser lorsqu’on sort de l’environnement Python classique, avec PyInstaller ou cx_freeze par exemple. Je ne sais pas vraiment ce qu’on pourrait faire, mais Python aurait peut-être besoin d’un standard de packaging pour programmes autonomes qui ne dépendent que de l’interpréteur, à la manière des JAR en Java
On peut créer des zipapps incluant les dépendances de l’application avec des outils comme shiv ou PEX, mais s’il y a des extensions binaires, l’artefact reste spécifique à une plateforme : https://github.com/linkedin/shiv#gotchas
Pour mes programmes Python, je recommande aux utilisateurs de les installer avec pipx : https://github.com/pypa/pipx
Si le public visé est un minimum technique, je pense que c’est le meilleur choix. Cela évite les conflits de versions de
pip install --useret la corvée de créer manuellement un environnement virtuel par application, tout en offrant une expérience utilisateur globalement correcte. On peut recommander pipx comme méthode d’installation par défaut et s’attendre à ce que les gens réussissent l’installation. Mon programme a des dépendances binaires, mais pas de GUIPersonnellement, je préfère CustomTKinter. C’est beaucoup plus élégant, avec une apparence proche des thèmes Material, et cela prend en charge les thèmes clair/sombre selon les paramètres système sous Windows/Linux/macOS
Il est étonnant que rien n’ait encore vraiment comblé le vide laissé par VB6 dans le domaine du développement rapide d’applications. Le langage lui-même n’était pas excellent, mais la force de VB6, c’était son constructeur de GUI en glisser-déposer
https://www.lazarus-ide.org/
https://gambas.sourceforge.net/en/main.html
https://qb64.com/inform.html
Pratique : il suffit de placer le fichier de mise en page à côté du script Python pour pouvoir l’utiliser avec pyqt. Le support Python de l’IDE n’est pas très bon, mais c’est peut-être mon installation qui est cassée
https://xojo.com/
J’envisage de greffer une GUI sur un outil qui dispose déjà d’une interface CLI assez bien conçue, afin que des personnes qui n’utilisent pas Linux sur desktop puissent aussi s’en servir. PySimpleGUI pourrait parfaitement répondre à mon besoin
https://github.com/hiAndrewQuinn/finstem
Mon outil a des flags CSV, TSV et JSON bien définis. Je me demande si certains ont déjà créé une GUI au-dessus d’un outil CLI complet existant sans le modifier, et quelles difficultés il faut anticiper
Le moteur et la GUI suivent un protocole comme WinBoard ou UCI[2], et échangent des commandes textuelles via STDIN/STDOUT. La principale difficulté est la même qu’en multithreading : des blocages peuvent apparaître si la GUI et la CLI s’attendent mutuellement. Il faut donc, des deux côtés, traiter les entrées/sorties dans des threads séparés de la « logique métier » afin de conserver la réactivité. Un autre problème courant est que la gestion des pipes varie selon les systèmes d’exploitation : il faut faire attention au flush des buffers et aux différences d’API entre Linux, Mac et Windows
[0] http://hgm.nubati.net/
[1] http://www.playwitharena.de/
[2] https://gist.github.com/DOBRO/2592c6dad754ba67e6dcaec8c90165...
J’espère ne pas paraître impoli, mais il y a trop de texte. Partout où il est possible de mettre du texte, il y a de longues phrases, et même si l’ensemble est plutôt cohérent, il n’y a pas une seule capture d’écran pertinente dans les mille premiers mots
Quelque chose semble décalé. On a l’impression que c’est soit un jeune développeur enthousiaste, soit quelqu’un qui a ajouté beaucoup de texte pour convaincre d’essayer l’outil. Le README contient même une section « about me » où l’auteur se présente. Un exemple serait de descendre à n’importe quel endroit du README, de lire quelques paragraphes, puis d’essayer de reformuler ce qu’on vient de lire
Certaines personnes aiment lire au sujet d’un outil, plutôt que d’avoir pour seule attitude « comment exécuter ça le plus vite possible en lisant le minimum de mots ». Comme vous utilisez gratuitement un outil créé par quelqu’un d’autre, mieux vaut arrêter de se plaindre et le laisser s’exprimer comme il le souhaite
[1] https://github.com/PySimpleGUI/PySimpleGUI#about-me-
J’espère ne pas paraître impoli, mais je me demande si, à moins qu’on ne vous serve un résumé étape par étape à la cuillère, vous n’avez pas tout simplement peur de devoir lire
La même idée aurait pu être formulée ainsi : « pour un projet visuel, je pense qu’il devrait y avoir davantage de captures d’écran dans la description principale », sans ajouter de suppositions insultantes
Si l’on met des mots comme Smart, Open, Trusted ou Secure dans le nom d’un projet, les gens auront facilement tendance à relever qu’il n’atteint pas l’idéal porté par son nom. À l’inverse, des noms comme C ou BSD n’ont pas de contraire ni d’implication particulière, ce qui rend difficile de dire que « le langage C ne mérite pas son nom »