Le Monde Merveilleux de Tkinter

Le Glossaire Ultime de Tkinter, une bibliothèque standard de Python pour la création d'interfaces graphiques, qui offre un monde de possibilités pour les développeurs. Que vous soyez un débutant curieux ou un professionnel, ce guide vous aidera à naviguer avec aisance dans le monde merveilleux de Tkinter. Préparez-vous à découvrir comment créer des widgets, gérer des événements, manipuler des images et bien plus encore !
27 juin 2023 par
Le Monde Merveilleux de Tkinter
Kevin Andreazza
| Aucun commentaire pour l'instant

Salut à tous les passionnés de Python ! Aujourd'hui, nous allons nous immerger dans le monde fascinant de Tkinter, la bibliothèque standard de Python pour la création d'interfaces graphiques. Accrochez-vous, car nous allons faire un tour détaillé de toutes les merveilles que Tkinter a à offrir !

Création de la fenêtre principale

from tkinter import Tk
 
fenetre = Tk() 
fenetre.mainloop()

Pour commencer, jetons un œil à la création de la fenêtre principale. Imaginez que vous construisez une maison, vous avez besoin de fondations solides, n'est-ce pas ? Et bien, Tkinter n'est pas différent. La classe Tk est notre fondation.

Création de widgets

Les widgets sont les éléments de base de l'interface utilisateur dans Tkinter. Ils représentent des éléments visuels tels que des boutons, des labels, des champs de texte, des listes déroulantes, des curseurs, etc. 

Chaque widget a des propriétés spécifiques qui déterminent son apparence et son comportement.

Un label, c'est un peu comme une étiquette que vous collez sur quelque chose pour le décrire. En Tkinter, un label est un widget qui peut afficher du texte ou des images.

from tkinter import Tk, Label
 
fenetre = Tk() 
etiquette = Label(fenetre, text="Bonjour, monde !") 
etiquette.pack() 

fenetre.mainloop()

Et voilà, vous avez votre premier label qui dit "Bonjour, monde !". Pas mal, hein ?

C'est un interrupteur, et quand vous appuyez dessus, quelque chose se passe. En Tkinter, un bouton est un widget qui peut exécuter une commande lorsqu'il est cliqué.

from tkinter import Tk, Button 

​def dire_bonjour(): 
​ print("Bonjour, monde !") 

fenetre = Tk() 
bouton = Button(fenetre, text="Cliquez ici", command=dire_bonjour) 
bouton.pack() 

fenetre.mainloop()

Maintenant, chaque fois que vous cliquez sur le bouton, il dit "Bonjour, monde !". C'est comme de la magie, non ?

Un widget d'entrée est un espace où vous pouvez écrire quelque chose. En Tkinter, un widget d'entrée est un widget qui permet à l'utilisateur de saisir une seule ligne de texte.

from tkinter import Tk, Entry 

fenetre = Tk() 
entree = Entry(fenetre) 
entree.pack() 

fenetre.mainloop()

Et hop, vous avez votre première boîte d'entrée. Vous pouvez y écrire tout ce que vous voulez !

Un widget de texte est un espace plus grand où vous pouvez écrire beaucoup de choses. En Tkinter, un widget de texte est un widget qui permet à l'utilisateur de saisir plusieurs lignes de texte.

tkinter import Tk, Text 

fenetre = Tk() 

texte = Text(fenetre) 
texte.pack() 

fenetre.mainloop()

Et voilà, vous avez votre première boîte de texte. Vous pouvez y écrire un roman si vous voulez !

Espace où vous pouvez laisser libre cours à votre créativité. Vous pouvez  y dessiner, créer des graphiques et placer d'autres widgets.

tkinter import Tk, Canvas 

fenetre = Tk() 

canvas = Canvas(fenetre, width=200, height=200) 
canvas.pack() 

fenetre.mainloop()

Et hop, vous avez votre première toile. Vous pouvez y dessiner tout ce que vous voulez, Picasso !

Un menu est un widget qui affiche une liste d'options. En Tkinter, un menu est un widget qui affiche une liste d'options.

from tkinter import Tk, Menu 
fenetre = Tk()
 
menu = Menu(fenetre) 
fenetre.config(menu=menu) 
menu_fichier = Menu(menu) 
menu.add_cascade(label="Fichier", menu=menu_fichier) 
menu_fichier.add_command(label="Nouveau", command=lambda: print("Nouveau fichier")) 

fenetre.mainloop()

Et voilà, vous avez votre premier menu. Vous pouvez y ajouter toutes les options que vous voulez, comme dans un vrai restaurant !

  • menu.add_cascade(label="Fichier", menu=menu_fichier) : 
    Ajoute le sous-menu "menu_fichier" au menu principal. 
      • label est utilisée pour définir le texte qui sera affiché pour le sous-menu dans le menu principal.
      • menu est utilisée pour définir le sous-menu qui sera affiché lorsque l'utilisateur sélectionne cette option dans le menu principal.

  • menu_fichier.add_command(label="Nouveau", command=lambda: print("Nouveau fichier")) : 
    Cette ligne
    ajoute une nouvelle option au sous-menu "menu_fichier. 
      • command est utilisée pour définir la fonction qui sera appelée lorsque l'utilisateur sélectionne cette option. Dans ce cas, lorsque l'utilisateur sélectionne "Nouveau", la fonction lambda sera appelée, qui affiche simplement "Nouveau fichier" dans la console.

import tkinter

fenetre = tkinter.Tk() 

cadre = tkinter.Frame(fenetre, bg="blue", bd=5, relief="ridge"
cadre.pack(side="left", padx=10, pady=10
label = tkinter.Label(cadre, text="Je suis dans le cadre !"
label.pack() fenetre.mainloop()
  • cadre = tkinter.Frame(fenetre, bg="blue", bd=5, relief="ridge") :
    Nouveau widget Frame. Le premier argument est le parent du cadre, qui est la fenêtre que nous avons créée précédemment. Les autres arguments sont des options qui définissent l'apparence du cadre :
      •  bg="blue" définit la couleur de fond du cadre en bleu,
      • bd=5 définit la largeur de la bordure du cadre en 5 pixels
      • relief="ridge" donne à la bordure du cadre un aspect en relief.

  • cadre.pack(side="left", padx=10, pady=10) : 
    Cela ajoute le cadre à la fenêtre. side="left" fait en sorte que le cadre soit aligné à gauche dans la fenêtre, et padx=10 et pady=10 ajoutent un espace de 10 pixels autour du cadre.

Espace où vous pouvez laisser libre cours à votre créativité. Vous pouvez  y dessiner, créer des graphiques et placer d'autres widgets.

tkinter import Tk, Canvas 

fenetre = Tk() 

canvas = Canvas(fenetre, width=200, height=200) 
canvas.pack() 

fenetre.mainloop()

Et hop, vous avez votre première toile. Vous pouvez y dessiner tout ce que vous voulez, Picasso !

Un menu est un widget qui affiche une liste d'options. En Tkinter, un menu est un widget qui affiche une liste d'options.

from tkinter import Tk, Menu 
fenetre = Tk()
 
menu = Menu(fenetre) 
fenetre.config(menu=menu) 
menu_fichier = Menu(menu) 
menu.add_cascade(label="Fichier", menu=menu_fichier) 
menu_fichier.add_command(label="Nouveau", command=lambda: print("Nouveau fichier")) 

fenetre.mainloop()

Et voilà, vous avez votre premier menu. Vous pouvez y ajouter toutes les options que vous voulez, comme dans un vrai restaurant !

Gestion des widgets

Maintenant que nous avons tous ces widgets, il est temps de les gérer. Tkinter offre plusieurs méthodes pour gérer les widgets une fois qu'ils ont été créés.

La méthode configure() est utilisée pour configurer les options de n'importe quel widget.

from tkinter import Tk, Button

fenetre = Tk() 

bouton = Button(fenetre, text="Cliquez ici"
bouton.pack() 
print(bouton.configure().keys()) # renvoie une vue des clés du dictionnaire

fenetre.mainloop()

Et hop, vous pouvez voir toutes les options de configuration disponibles pour votre bouton. C'est comme avoir le plan de construction de votre maison !

Lorsqu'elle est appelée sans arguments, comme c'est le cas ici, elle renvoie un dictionnaire contenant toutes les options de configuration actuelles du widget et leurs valeurs.

  • Voici quelques options communes que vous pouvez généralement passer à configure()
      • background ou bg : pour changer la couleur de fond du widget.
      • foreground ou fg : pour changer la couleur du texte (pour les widgets qui affichent du texte).
      • font : pour changer la police du texte.
      • text : pour changer le texte affiché par le widget (pour les widgets qui affichent du texte).
      • width et height : pour changer la largeur et la hauteur du widget.
      • state : pour changer l'état du widget
          • normal : C'est l'état par défaut. Le widget fonctionne normalement et l'utilisateur peut interagir avec lui (par exemple, cliquer sur un bouton ou saisir du texte dans une entrée).

          • disabled : Le widget est grisé et l'utilisateur ne peut pas interagir avec lui. C'est utile si vous voulez empêcher l'utilisateur de cliquer sur un bouton jusqu'à ce qu'une certaine condition soit remplie.

          • readonly : Cet état est principalement utilisé avec le widget Entry. Dans cet état, l'utilisateur peut voir et sélectionner le texte dans l'entrée, mais ne peut pas le modifier.

      • relief : pour changer l'apparence de la bordure du widget
          • flat : Il n'y a pas de bordure.
          • raised : La bordure donne l'impression que le widget est en relief par rapport à son environnement. C'est comme si le widget "sortait" de l'écran.
          • sunken : La bordure donne l'impression que le widget est enfoncé par rapport à son environnement. C'est comme si le widget "s'enfonçait" dans l'écran.
          • groove : La bordure a l'apparence d'un sillon (une ligne creuse avec des bords en relief).
          • ridge : La bordure a l'apparence d'une crête (une ligne en relief avec des bords creux).
      • borderwidth ou bd : pour changer la largeur de la bordure du widget.

La méthode pack() est utilisée pour organiser les widgets en blocs avant de les placer dans le conteneur parent.

from tkinter import Tk, Button

fenetre = Tk() 
bouton = Button(fenetre, text="Cliquez ici") 
bouton.pack(side="left") 
fenetre.mainloop()

Et voilà, vous avez organisé votre bouton à gauche dans la fenêtre principale. C'est comme avoir un déménageur professionnel pour organiser vos meubles !

Gestion des événements

Cette méthode est un chien de garde, elle surveille certains événements et déclenche une fonction de rappel lorsque ce type d'événement se produit.

bind()

def turn_red(self, event):

	​ 	​event.widget["activeforeground"] = "red"
self.button.bind("<Enter>", self.turn_red)

Et voilà, maintenant chaque fois que vous passez la souris sur le bouton, il devient rouge. C'est comme avoir un chien de garde qui aboie chaque fois qu'un intrus approche !


SYNTAXE DE BASE :

widget.bind(event, handler) :

  • widget est l'objet sur lequel l'événement est surveillé.
  • event est une chaîne qui spécifie quel type d'événement déclenche la fonction
    • EXEMPLE :

  • Types

    Déclenche événement

    Objet

    "<Button-1>"
    "<Button-2>"
    "<Button-3>"

    clic gauche
    clic milieu
    clic droit


    souris

    "<Double-Button-1>"
    "<Double-Button-2>"
    "<Double-Button-3>"

    double-clic gauche
    double-clic milieu

    double-clic droit


    souris

    "<Enter>""<Leave>"

    Entrée et sortie du widget

    curseur

    "<KeyPress>"
    "<KeyRelease>"

    appuyer ou relâcher une touche

    clavier

    "<KeyPress-A>"

    spécifier la touche qui déclenche l'événements

    clavier

    "<FocusIn>"
    "<FocusOut>"

    gagner ou perdre le focus*

    élément actif

    "<Configure>"
    "<Motion>"

    taille ou position du widget change
    déplacement du curseur sur le widget


    souris

*Le "focus" dans une interface graphique se réfère à l'élément de l'interface qui est actuellement actif ou sélectionné et qui reçoit les entrées de l'utilisateur. Par exemple, si vous avez plusieurs champs de texte dans une fenêtre, seul l'un d'entre eux peut avoir le focus à la fois. Lorsqu'un champ de texte a le focus, il est prêt à recevoir les entrées du clavier de l'utilisateur.
Lorsqu'on dit qu'un widget "gagne le focus" ("<FocusIn>"), cela signifie qu'il devient l'élément actif. Par exemple, si l'utilisateur clique sur un champ de texte, ce champ de texte gagne le focus et l'utilisateur peut commencer à taper du texte dedans.
  • handler est la fonction qui est appelée lorsque l'événement se produit. Cette fonction doit accepter un argument, qui est un objet d'événement contenant des informations sur l'événement.


Gestion des images

Les images de différents formats peuvent être créées grâce à la sous-classe correspondante de tkinter.Image :

  • BitmapImage pour les images au format XBM.
  • PhotoImage pour les images aux formats PGM, PPM, GIF et PNG.

L'objet image peut ensuite être utilisé partout où une option image est supportée par un widget (par exemple, les labels, les boutons, les menus). Lorsque la dernière référence Python à l'objet image est supprimée, les données de l'image sont également supprimées, et Tk affichera une boîte vide à l'endroit où l'image était utilisée. C'est un peu comme si vous aviez accroché un tableau sur un mur, puis l'aviez enlevé plus tard, laissant un espace vide.

Gestion des fichiers

Tkinter offre également des méthodes pour gérer les fichiers. C'est comme avoir votre propre bibliothécaire personnel !

La méthode createfilehandler() permet d'enregistrer une fonction de rappel qui sera appelée à partir de la boucle principale de Tk lorsque des opérations d'E/S sont possibles sur un descripteur de fichier. Seule une fonction de rappel peut être enregistrée par descripteur de fichier. C'est un peu comme si vous aviez un bibliothécaire qui vous appelait chaque fois qu'un nouveau livre arrive.

La méthode deletefilehandler() fait l'inverse et permet de désenregistrer un gestionnaire de fichiers. C'est un peu comme si vous disiez à votre bibliothécaire que vous n'avez plus besoin de ses services.

Modules supplémentaires

Tkinter c'est aussi pléthore d'autres modules et fonctionnalités plus avancées. Une sorte d'extension pour votre maison quoi !

  • tkinter.colorchooser : Fournit une boîte de dialogue pour choisir une couleur. 

  • tkinter.commondialog : Classe de base pour les boîtes de dialogue.

  • tkinter.filedialog : Fournit des boîtes de dialogue pour spécifier un fichier à ouvrir ou à enregistrer. 

  • tkinter.font : Fournit des utilitaires pour travailler avec les polices. 

  • tkinter.messagebox : Fournit des boîtes de dialogue pour afficher des messages d'erreur, d'avertissement et d'information. 

  • tkinter.scrolledtext : Fournit un widget de texte avec une barre de défilement verticale intégrée. 

  • tkinter.simpledialog : Fournit des fonctions de commodité et des boîtes de dialogue de base. 

  • tkinter.ttk : Fournit un ensemble de widgets thématiques. 

  • tkinter.dnd : Fournit un support de glisser-déposer pour tkinter (expérimental). 

  • tkinter.tix : Ajoute plusieurs nouveaux widgets (déprécié). 

  • turtle : Fournit des graphiques de tortue dans une fenêtre Tk.

Approfondir


Ressources complémentaires ayant servit à établir ce glossaire correctement : 

  1. Tutoriel Tkinter - Bouton de contrôle
  2. Tkinter
  3. Tkinter - the Python interface for Tk
  4. What is Tkinter?
  5. Create UI using Tkinter in Python
  6. Les interfaces graphiques
  7. Python Tkinter Tutorial - Studyfied
  8. Tkinter Programming in Python
  9. Tkinter tutorial - procedural style
  10. Introduction to Tkinter
  11. Chat-GPT LLM  assistant version 4

Tkinter est un outil essentiel pour la création d'interfaces utilisateur en Python. Cependant, son potentiel ne cesse de croître grâce à l'apport de la communauté. Vous avez des astuces, des projets ou des suggestions liés à Tkinter ? Partagez-les dans les commentaires ci-dessous. 

Ensemble, nous faisons une réelle différence, et comme votre expertise compte, n'hésitez pas à la partager !


Le Monde Merveilleux de Tkinter
Kevin Andreazza 27 juin 2023
Partager cet article
Archiver
Se connecter pour laisser un commentaire.