Ce document est relatif à une vieille version de Python qui n'est plus soutenue. Mettez à jour votre version et lisez Bienvenue sur la documentation de la version stable actuelle de Python.

# FAQ interface graphique

Sommaire

- FAQ interface graphique

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

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

  - Questions à propos de Tkinter

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

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

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

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