wxPython est un wrapper Python pour le jeu d'outils GUI wxWidgets. Découvrez tout ce que vous devez savoir à son sujet : présentation, fonctionnement, avantages, alternatives, formations...
En 1995, Robin Dunn avait besoin d’une solution multiplateforme, une application d’interface utilisateur graphique (GUI) pouvant être sur des systèmes HP-UX, mais aussi sur Windows 3.1.
En consultant les solutions gratuites et commerciales existantes, il découvrit des bindings Python sur la page web du toolkit wxWidgets alors appelé wxWindows.
C’est ainsi qu’il découvrit Python. À l’aide de ses camarades Harri Pasanen et Edward Zimmerman, il entreprit alors de développer un binding dénommé wxPython.
Qu'est-ce que Python ?
Initialement développé par Guido van Rossum et lancé en 1991, Python est un langage de programmation interprété, interactif et orienté objet. On le compare souvent à Tcl, Perl, Scheme ou Java et il est inspiré par les langages ABC et Haskell.
Il s’agit d’un langage généraliste de haut niveau, mais certains préfèrent le qualifier de langage dynamique. Simple à apprendre, Python doit sa popularité à son minimalisme.
Sa syntaxe se rapproche de la langue anglaise. Par exemple, il n’utilise pas de point-virgule ou de parenthèses. Aujourd’hui, Python est maintenu par une large communauté de contributeurs dans le monde entier.
En outre, Python propose de nombreuses bibliothèques et des wrappers pour les outils existants dans d’autres langages. Pour la création d’interfaces utilisateur graphiques (GUI), les trois principales options sont PyGTK, PyQt et wxPython.
Qu'est-ce que wxPython ?
wxPython est un wrapper de l’API d’interface utilisateur graphique (GUI) wxWidgets pour le langage Python. Cette API est écrite en C++, et wxPython est donc indispensable pour l’utiliser en Python. C’est une alternative à Tktinter, proposé par défaut avec Python.
Ce package peut être importé au runtime, et regroupe une collection de modules Python et un module d’extension de code natif. Il fournit une série de classes Python similaires aux classes du wxWidgets.
Le module d’extension reflète la hiérarchie de classes de wxWidgets. On retrouve par exemple une classe wxFrame dans wxPython ressemblant à s’y méprendre à la classe wxFrame de la version C++.
En tant que wrapper, wxPython utilise la même licence de logiciel libre que wxWdigets : wxWindows Licence. Elle est approuvée par la Free Software Foundation et l’Open Source Initiative.
Après la version 0.2 en 1995, la version 0.3 a été lancée en août 1998. Elle était conçue pour wxWidgets 2.0 et fonctionnait sur Win32. Une version wxGTK a aussi été développée pour les plateformes Unix/X-windows.
Les premières versions de wxPython étaient créées manuellement, mais il devint difficile de maintenir le code et de préserver la synchronisation avec les relaxes wxWidgets. À partir de 1997, des versions ont été créées avec SWIG pour réduire le volume de travail sur les mises à jour.
Qu'est-ce que le Project Phoenix ?
Annoncé en 2010, le Project Phoenix a pour but d’épurer wxPython tout en la rendant compatible avec Python 3. Il s’agit d’une nouvelle implémentation de wxPython focalisé sur la vitesse, l’extensibilité et la maintenabilité.
Comme les précédentes versions de wxPython, ce nouveau projet enrobe le toolkit wxWidgets C++ et ouvre l’accès aux portions d’interface utilisateur de l’API wxWidgets. À partir de la version 4.0.0a1 de wxPython lancée en 2017, le projet Phoenix est devenu la version officielle du wrapper.
À quoi sert wxPython ?
Le rôle de wxPython est de permettre d’utiliser Python pour créer des applications GUI multiplateformes sans avoir besoin de code spécifique à chaque plateforme.
On peut aussi l’utiliser dans des situations où Python est intégré dans une application en C++ en tant que langage macro ou de scriptage interne.
C’est un outil utile pour les personnes préférant utiliser Python que C++. Il permet également le prototypage rapide d’application wxWidgets, là où C++ exige de passer du temps sur le cycle compile-link-run. En Python, ce cycle est réduit à edit-run.
Il est donc possible de construire une application en quelques heures au lieu de plusieurs jours avec C++. La conversion d’une application wxPython en application C++/wxWindgets est aussi une tâche simple.
Parmi les applications connues développées avec wxPython, on peut citer la gestion d’informations personnelles Chandler, les clients desktop des services de stockage cloud Dropbox et Google Drive, l’éditeur de texte multiplateforme Editra, ou encore le logiciel de traitement de photos Phatch.
D’autres exemples sont le système d’information géographique GRASS GIS, les fronts-ends PlayOnLinux et PlayOnMac pour Wine, et l’outil de neuroscience PsychoPy.
Les alternatives à wxPython
Il existe d’autres solutions GUI pour Python, pouvant servir d’alternative à wxPython. Tout d’abord, Tkinter est le GUI standard par défaut pour Python, disponible sur toutes les plateformes compatibles avec Python et Tcl/TK.
Il s’agit en effet d’un wrapper pour le toolkit GUI Tk de Tcl. Ce jeu d’outils est polyvalent, et peut être utilisé pour de nombreux cas d’usage dans une large variété d’environnements.
La création de nouveaux widgets est plutôt facile, au même titre que leur usage de façon interchangeable dans les programmes. En revanche, Tkinter oblige à utiliser deux interpréteurs de langage séparés : l’interpréteur Python, et l’interpréteur Tcl pour la GUI.
En outre, Tcl est principalement dédié au traitement de string et s’avère donc plutôt lent. Enfin, Tkinter est un toolkit de bas niveau exigeant beaucoup de codage pour des tâches pouvant être simplifiées par abstraction.
Une autre alternative à wxPython est PythonWin : un package d’add-on Python pour la plateforme Win32. Il inclut les wrappers pour MFC et pour un large pan de l’API Win32. Les programmeurs familiarisés avec MFC et l’API Win32 seront en terrain connu.
Bien évidemment, PythonWin n’est pas compatible avec d’autres plateformes et toolkits. Il est organisé en packages et modules séparés, pouvant être utilisés au besoin sans avoir à utiliser les portions GUI.
De nombreux autres modules GUI pour Python sont disponibles. Certains sont en développement actifs, d’autres n’ont pas été mis à jour depuis bien longtemps. La plupart sont de simples wrappers pour des toolkits en C ou C++. Peu d’entre eux sont multiplateformes. Vous pouvez découvrir la liste complète sur le site de PyPi.
Conclusion
wxPython est l’un des différents wrappers Python pour les jeux d’outils GUI en C et C++. Afin d’apprendre à maîtriser le langage Python et ses wrappers, bibliothèques ou modules, vous pouvez choisir DataScientest.
Nos formations comportent un module entièrement dédié à la programmation en Python, parallèlement aux autres modules dédiés à l’analyse de données, à la DataViz ou au Machine Learning.
À travers les divers cursus, vous pourrez acquérir toutes les compétences indispensables pour exercer les professions de Data Analyst, Data Engineer, Data Scientist, Machine Learning Engineer ou encore Data Product Manager.
Tous nos programmes se complètent à distance via le web, et notre organisme reconnu par l’État est éligible au Compte Personnel de Formation pour le financement. Découvrez DataScientest !
Vous savez tout sur wxPython. Pour plus d’informations sur le même sujet, découvrez notre dossier sur pyGTK et notre dossier dédié à pyQt.