La gestion de la saisie de texte dans une application graphique peut être complexe.
Sans une méthode appropriée, la saisie utilisateur peut devenir imprécise et difficile à manipuler.
Découvrez comment le widget Entry de Tkinter simplifie ce processus, offrant des solutions efficaces pour récupérer et manipuler les entrées utilisateur.
Créez des interfaces graphiques interactives avec Python et TKinter !
Utiliser Entry Tkinter pour saisie de texte
Dans une application Tkinter, la saisie de texte est souvent réalisée à l’aide du widget Entry . Ce widget permet à l’utilisateur de taper du texte, qui peut ensuite être récupéré et manipulé dans le programme. Voici un exemple simple pour illustrer comment récupérer la saisie de l’utilisateur dans une application Tkinter :
from tkinter import *
# Fonction qui sera exécutée lors du clic sur le bouton
defdit_bonjour():
# Récupérer le texte saisi dans le champ Entry et le configurer dans le Label
lbl.config(text="Bonjour, " + entry.get())
# Créer la fenêtre principale
root = Tk()
root.title('Mon application')
root.geometry('800x600+600+200')
# Définir une police personnalisée
myfont = ("Arial", 20)
# Créer un label qui affichera un message ou une réponse
lbl = Label(root,text="Votre prénom",font=myfont)
lbl.pack()
# Créer un champ de saisie (Entry) où l'utilisateur pourra entrer son texte
entry = Entry(root,font=myfont)
entry.pack()
# Créer un bouton qui, lorsqu'il est cliqué, exécute la fonction 'dit_bonjour'
btn = Button(root,text="Valider",font=myfont,command=dit_bonjour)
btn.pack()
# Lancer la boucle principale de l'application Tkinter
root.mainloop()
Voici une explication détaillé du code précèdent :
- Champ de saisie (Entry) :Le widgetEntryest utilisé pour permettre à l’utilisateur d’entrer du texte. Dans cet exemple, nous avons défini un champ de saisie avec la commande suivante :
entry = Entry(root,font=myfont)
entry.pack()
Ce champ est ajouté à la fenêtre principale root . Vous pouvez spécifier des options telles que la police, la largeur, ou même des paramètres comme la visibilité du texte (utile pour des champs de mot de passe).
- Récupération du texte :Le texte saisi dans le champEntrypeut être récupéré à l’aide de la méthode.get():
entry.get()
Dans cet exemple, la fonction dit_bonjour() est appelée lors du clic sur le bouton « Valider ». Cette fonction récupère le texte de entry et l’affiche dans un label lbl .
- Bouton pour valider :Le bouton est créé à l’aide du widgetButtonavec la commande suivante :
btn = Button(root,text="Valider",font=myfont,command=dit_bonjour)
btn.pack()
Le paramètre command=dit_bonjour indique que, lorsqu’on clique sur le bouton, la fonction dit_bonjour est exécutée. En exécutant ce code, l’utilisateur pourra entrer son prénom dans le champ Entry et cliquer sur le bouton « Valider ». Le texte de l’étiquette ( lbl ) sera alors mis à jour pour afficher « Bonjour, [prénom] », où [prénom] correspond au texte saisi par l’utilisateur.
Tkinter Entry : StringVar() et .set()
Il est possible de pré-remplir un champ de saisie Entry avec un texte par défaut en utilisant la classe StringVar() et la méthode .set() en Tkinter. Pour réaliser cela, on utilise StringVar(), une variable spéciale de Tkinter qui permet de stocker et de gérer des chaînes de caractères de manière dynamique. Contrairement aux variables classiques de Python, elle est spécifiquement conçue pour fonctionner avec les widgets Tkinter. Cela crée une liaison directe entre la donnée et l’interface graphique. Ainsi, lorsqu’une valeur associée à un StringVar est modifiée dans le programme, le widget lié (comme un champ de saisie ou un label) se met à jour automatiquement, et inversement. Cette interaction bidirectionnelle simplifie la gestion des interfaces dynamiques. Voici une version améliorée de l’exemple précédent, intégrant la possibilité d’ajouter un texte par défaut au champ Entry :
from tkinter import *
# Fonction qui sera exécutée lors du clic sur le bouton
defdit_bonjour():
# Récupérer le texte saisi dans le champ Entry et l'afficher dans le Label
lbl.config(text="Bonjour, " + entry_var.get())
# Créer la fenêtre principale
root = Tk()
root.title('Mon application')
root.geometry('800x600+600+200')
# Définir une police personnalisée
myfont = ("Arial", 20)
# Créer un label qui affichera un message ou une réponse
lbl = Label(root,text="Votre prénom",font=myfont)
lbl.pack()
# Utiliser un StringVar pour stocker la valeur du champ Entry
entry_var = StringVar()
# Ajouter un texte par défaut à l'aide de la méthode set()
entry_var.set("Entrez votre prénom ici")
# Créer un champ de saisie (Entry) avec un texte par défaut
entry = Entry(root,textvariable=entry_var,font=myfont)
entry.pack()
# Créer un bouton qui, lorsqu'il est cliqué, exécute la fonction 'dit_bonjour'
btn = Button(root,text="Valider",font=myfont,command=dit_bonjour)
btn.pack()
# Lancer la boucle principale de l'application Tkinter
root.mainloop()
Dans Tkinter, un objet StringVar() est utilisé pour gérer les chaînes de caractères et leur association avec les widgets, comme un champ Entry . Dans cet exemple, nous créons un StringVar() pour le champ d’entrée :
entry_var = StringVar()
Ensuite, nous utilisons la méthode .set() pour définir un texte par défaut dans le champ Entry :
entry_var.set("Entrez votre prénom ici")
Puis pour associer ce StringVar au champ Entry , nous utilisons l’option textvariable dans la création du champ :
entry = Entry(root,textvariable=entry_var,font=myfont)
Cela permet de lier le contenu du champ d’entrée à la variable entry_var , facilitant à la fois la mise à jour et la récupération de la valeur du champ.
Pour récupérer la valeur saisie par l’utilisateur (ou le texte par défaut s’il n’a pas été modifié), on utilise la méthode .get() sur l’objet StringVar :
entry_var.get()
En résumé, lorsque l’application démarre, le champ Entry est pré-rempli avec le texte « Entrez votre prénom ici ». L’utilisateur peut soit conserver ce texte, soit le remplacer par un autre. En cliquant sur le bouton « Valider », la fonction dit_bonjour() récupère la valeur actuelle du champ et l’affiche dans le label. Voici la fenêtre obtenue lors de l’exécution de ce code :
Pré-remplir Entry Tkinter avec .insert()
En plus de l’utilisation de StringVar() et .set(), il est possible d’ajouter un texte par défaut directement dans le champ Entry avec la méthode .insert() . Cette méthode permet d’insérer du texte à une position spécifique dans le champ de saisie. En général, le texte par défaut est inséré au début du champ. Voici un exemple qui illustre l’utilisation de la méthode insert() pour pré-remplir un champ Entry avec un texte par défaut
from tkinter import *
# Fonction qui sera exécutée lors du clic sur le bouton
defdit_bonjour():
lbl.config(text="Bonjour, " + entry.get())
root = Tk()
root.title('Mon application')
root.geometry('800x600+600+200')
# Définir une police personnalisée
myfont = ("Arial", 20)
# Créer un label qui affichera un message ou une réponse
lbl = Label(root,text="Votre prénom",font=myfont)
lbl.pack()
# Créer un champ de saisie (Entry)
entry = Entry(root,font=myfont)
entry.pack()
# Ajouter un texte par défaut en utilisant la méthode insert()
entry.insert(0, "Entrez votre prénom ici")
btn = Button(root,text="Valider",font=myfont,command=dit_bonjour)
btn.pack()
root.mainloop()
Comme il est montré dans le code au-dessus La méthode .insert() permet d’insérer du texte dans un widget Entry . Elle prend deux arguments :
- Le premier argument est la position à laquelle le texte doit être inséré. Ici, `0` indique que le texte sera inséré au début du champ.
- Le second argument est le texte lui-même. Dans cet exemple, nous insérons le texte « Entrez votre prénom ici » dans le champ d’entrée .
Cela signifie que lorsque l’application s’ouvre, le champ de saisie sera pré-rempli avec ce texte par défaut. Pour mieux comprendre voici le résultat d’exécution de ce programme :
Exemple Entry Tkinter : méthode .set()
La méthode set() permet de modifier la valeur d’une variable Tkinter associée à un widget, comme StringVar() ou IntVar(). Elle est couramment utilisée pour mettre à jour dynamiquement les valeurs affichées dans des widgets comme Entry, Label, ou Checkbutton. Contrairement à d’autres bibliothèques, set() n’est pas une méthode directe des widgets eux-mêmes, mais plutôt des variables liées à ces widgets.
Lors de l’utilisation du widget Entry en Tkinter, il est essentiel de comprendre que la méthode set() n’est pas directement accessible pour ce type de widget. En effet, tenter d’appeler set() sur un Entry déclenchera une erreur, car cette méthode ne fait pas partie des fonctionnalités natives de l’API Tkinter pour les widgets de saisie de texte. Voici un exemple illustrant l’erreur générée lorsqu’on tente d’utiliser cette méthode incorrectement :
import tkinter as tk
root = tk.Tk()
entry = tk.Entry(root)
entry.pack()
# Tentative d'utiliser la méthode set()
entry.set("Texte")# Cela déclenchera une erreur : AttributeError: 'Entry' object has no attribute 'set'
root.mainloop()
En exécutant ce code, une `AttributeError` sera levée comme il est montré dans la figure suivante :
Figure 16 : Erreur levée en utilisant la méthode set() avec le widget Entry en Tkinter
Cette erreur signale que la méthode set() n’existe pas pour l’objet Entry . Il provient du fait que set() est généralement utilisé avec des variables associées comme StringVar pour gérer le contenu des widgets, mais pas directement sur le widget Entry lui-même.
La solution à ce problème consiste à créer une variable Tkinter, par exemple un StringVar(), et à la lier au widget Entry. Ensuite, vous pouvez utiliser la méthode set() sur cette variable pour modifier dynamiquement le contenu du champ. Voici un exemple de correction :
import tkinter as tk
# Création de l'instance principale de la fenêtre
root = tk.Tk()
root.title("Exemple d'Entry avec StringVar")
# Création d'une variable Tkinter associée
var = tk.StringVar()
# Création d'un widget Entry avec la variable associée
entry = tk.Entry(root,textvariable=var)
entry.pack()
# Fonction pour modifier le contenu du champ Entry
defmodifier_texte():
var.set("Nouveau texte")
# Création d'un bouton pour modifier le texte
button = tk.Button(root,text="Modifier le texte",command=modifier_texte)
button.pack()
# Lancement de la boucle principale
root.mainloop()
Dans cet exemple, nous avons associé une variable StringVar() au widget Entry via l’attribut textvariable. En appelant la méthode set() sur la variable, le texte du champ de saisie est mis à jour dynamiquement sans déclencher d’erreur. Cela permet d’utiliser correctement la méthode set() tout en profitant de la liaison entre la variable Tkinter et le widget.
Avantages des widgets Entry Tkinter
L’utilisation des widgets de saisie de texte présente de nombreux avantages, parmi lesquels on trouve :
Figure 17 : Avantages de l’utilisation des widgets de saisie de texte dans Tkinter
- Simplicité d’intégration :Les widgets Entry sont faciles à ajouter et permettent une saisie utilisateur simple et intuitive.
- Flexibilité :Avec des méthodes comme get(), set() et insert(), la gestion du texte devient flexible et adaptée à divers besoins.
- Interactivité accrue :Ces widgets permettent de créer des applications plus dynamiques en interagissant avec l’utilisateur à travers des formulaires et des champs de saisie.
Formez-vous gratuitement avec Alphorm !
Maîtrisez les compétences clés en IT grâce à nos formations gratuites et accélérez votre carrière dès aujourd'hui.
FAQ
Comment récupérer la saisie de texte en Tkinter ?
Comment pré-remplir un champ Entry avec Tkinter ?
Quelles erreurs éviter avec Entry en Tkinter ?
Quels sont les avantages des widgets Entry en Tkinter ?
Comment utiliser la méthode insert() avec Entry en Tkinter ?
Conclusion
En maîtrisant l’utilisation du widget Entry, vous pouvez créer des applications Tkinter interactives et dynamiques. Quel projet envisagez-vous d’améliorer avec ces compétences ?