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.

One solution is to ship the application with the Tcl and Tk libraries,
and point to them at run-time using the "TCL_LIBRARY" and "TK_LIBRARY"
environment variables.

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*
(https://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* ?
-----------------------------------------------------------------

On platforms other than Windows, yes, and you don't even need threads!
But you'll have to restructure your I/O code a bit.  Tk has the
equivalent of Xt's "XtAddInput()" call, which allows you to register a
callback function which will be called from the Tk mainloop when I/O
is possible on a file descriptor.  See Gestionnaires de fichiers.


Je n'arrive pas à faire fonctionner les raccourcis clavier dans *Tkinter* : pourquoi ?
--------------------------------------------------------------------------------------

An often-heard complaint is that event handlers bound to events with
the "bind()" method don't get handled even when the appropriate key is
pressed.

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