FAQ interface graphique
***********************


Questions générales sur l'interface graphique
=============================================


Quelles boîtes à outils IUG existent pour Python ?
==================================================

Les versions standards de Python incluent une interface orientée objet
pour le jeu d'objets graphiques *Tcl/Tk*, appelée tkinter.  C'est
probablement la plus facile à installer (puisqu'elle est incluse avec
la plupart des distributions binaires de Python) et à utiliser. Pour
plus d'informations sur *Tk*, y compris les liens vers les sources,
voir la page d'accueil Tcl/Tk.  *Tcl/Tk* est entièrement portable sur
les plates-formes macOS, Windows et Unix.

D'autres outils existent. Le choix doit dépendre notamment de la ou
des plateformes que vous visez. Sur le Wiki Python se trouvent des
listes de bibliothèques graphiques multiplateformes et pour une seule
plate-forme.


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*).
