FAQ interface graphique

Quelles boites à outils multi-plateforme existe-t-il sur Python ?

Depending on what platform(s) you are aiming at, there are several.

Tkinter

Standard builds of Python include an object-oriented interface to the Tcl/Tk widget set, called Tkinter. This is probably the easiest to install and use. For more info about Tk, including pointers to the source, see the Tcl/Tk home page at https://www.tcl.tk. Tcl/Tk is fully portable to the Mac OS X, Windows, and Unix platforms.

wxWidgets

wxWidgets (https://www.wxwidgets.org) est une librairie de classe IUG portable et gratuite écrite en C++ qui fournit une apparence native sur un certain nombre de plates-formes, elle est notamment en version stable pour Windows, Mac OS X, GTK et X11. Des clients sont disponibles pour un certain nombre de langages, y compris Python, Perl, Ruby, etc.

wxPython (http://www.wxpython.org) est le portage Python de wxWidgets. Bien qu’il soit légèrement en retard sur les versions officielles de wxWidgets, il offre également des fonctionnalités propres à Python qui ne sont pas disponibles pour les autres langages. WxPython dispose de plus, d’une communauté d’utilisateurs et de développeurs active.

wxWidgets et wxPython sont tous deux des logiciels libres, open source, avec des licences permissives qui permettent leur utilisation dans des produits commerciaux ainsi que dans des logiciels gratuits ou contributifs (shareware).

Qt

Il existe des liens disponibles pour la boîte à outils Qt (en utilisant soit PyQt ou PySide) et pour KDE (PyKDE4). PyQt est actuellement plus mûre que PySide, mais*PyQt* nécessite d’acheter une licence de Riverbank Computing si vous voulez écrire des applications propriétaires. PySide est gratuit pour toutes les applications.

Qt >= 4.5 est sous licence LGPL ; de plus, des licences commerciales sont disponibles auprès de The Qt Company.

Gtk+

PyGtk bindings for the Gtk+ toolkit have been implemented by James Henstridge; see <http://www.pygtk.org>.

FLTK

Les liaisons Python pour the FLTK toolkit, un système de fenêtrage multi-plateformes simple mais puissant et mûr, sont disponibles auprès de the PyFLTK project.

OpenGL

Pour les clients OpenGL, voir PyOpenGL.

Quelles boîtes à outils IUG spécifiques à la plate-forme existent pour Python ?

By installing the PyObjc Objective-C bridge, Python programs can use Mac OS X’s Cocoa libraries.

Pythonwin de Mark Hammond inclut une interface vers les classes Microsoft Foundation Classes et un environnement de programmation Python qui est écrit principalement en Python utilisant les classes MFC.

Questions à propos de Tkinter

Comment puis-je geler (freezer) les applications Tkinter ?

Freeze est un outil pour créer des applications autonomes. Lors du freezage des applications Tkinter, les applications ne seront pas vraiment autonomes, car l’application aura toujours besoin des bibliothèques Tcl et Tk.

Une solution consiste à empaqueter les bibliothèques Tcl et Tk dans l’application et de les retrouver à l’exécution en utilisant les variables d’environnement TCL_LIBRARY et TK_LIBRARY.

Pour obtenir des applications vraiment autonomes, les scripts Tcl qui forment la bibliothèque doivent également être intégrés dans l’application. Un outil supportant cela est SAM (modules autonomes), qui fait partie de la distribution Tix (http://tix.sourceforge.net/).

Compilez Tix avec SAM activé, exécutez l’appel approprié à Tclsam_init(), etc. dans le fichier Modules/tkappinit.c de Python, et liez avec libtclsam et libtksam (il est également possible d’inclure les bibliothèques Tix).

Puis-je modifier des événements Tk pendant l’écoute des E/S ?

Sur d’autres plates-formes que Windows, oui, et vous n’avez même pas besoin de fils d’exécution multiples ! Mais vous devrez restructurer un peu votre code E/S. Tk possède l’équivalent de l’appel XtAddInput() de Xt, qui vous permet d’enregistrer une fonction de callback qui sera appelée par la boucle principale Tk lorsque des E/S sont disponibles sur un descripteur de fichier. Voir Gestionnaires de fichiers.

Je n’arrive pas à faire fonctionner les raccourcis clavier dans Tkinter : pourquoi ?

Une raison récurrente est que les gestionnaires d’évènements liés à des évènements avec la méthode bind() ne sont pas pris en charge même lorsque la touche appropriée est activée.

La cause la plus fréquente est que l’objet graphique auquel s’applique la liaison n’a pas de « focus clavier ». Consultez la documentation Tk pour la commande focus. Habituellement, un objet graphique reçoit le focus du clavier en cliquant dessus (mais pas pour les étiquettes ; voir l’option takefocus).