OUJOOD.COM
Le widget Entry est le champ de saisie texte d'une seule ligne de Tkinter. C'est lui qu'on utilise pour les formulaires, les barres de recherche, les champs login ou mot de passe. Pour du texte multiligne, c'est le widget Text qu'il faut regarder.
Créer un champ et récupérer sa valeur
La méthode get() retourne le contenu du champ au moment où elle est appelée :
import tkinter as tk
def afficher_saisie():
valeur = champ.get()
label_resultat.config(text=f"Vous avez saisi : {valeur}")
fenetre = tk.Tk()
fenetre.title("Entry - exemple")
fenetre.geometry("350x150")
champ = tk.Entry(fenetre, width=30)
champ.pack(pady=15)
tk.Button(fenetre, text="Valider", command=afficher_saisie).pack()
label_resultat = tk.Label(fenetre, text="")
label_resultat.pack(pady=8)
fenetre.mainloop()
La largeur se définit en nombre de caractères avec width, pas en pixels. Un width=30 correspond à peu près à 30 caractères de largeur moyenne — cela varie selon la police utilisée.
Pré-remplir et vider un champ
On insère du texte avec insert() et on vide le champ avec delete() :
import tkinter as tk
fenetre = tk.Tk()
fenetre.geometry("350x160")
champ = tk.Entry(fenetre, width=30)
champ.pack(pady=15)
# Pré-remplir à la création
champ.insert(0, "Valeur par défaut")
def vider():
champ.delete(0, tk.END) # supprime du caractère 0 à la fin
def reinitialiser():
champ.delete(0, tk.END)
champ.insert(0, "Valeur par défaut")
tk.Button(fenetre, text="Vider", command=vider).pack(side="left", padx=20)
tk.Button(fenetre, text="Réinitialiser", command=reinitialiser).pack(side="left")
fenetre.mainloop()
insert(0, texte) insère au début du champ. insert(tk.END, texte) ajoute à la fin. delete(0, tk.END) efface tout le contenu — c'est la façon standard de vider un Entry.
Masquer la saisie — champ mot de passe
Le paramètre show remplace chaque caractère saisi par le symbole choisi :
import tkinter as tk
fenetre = tk.Tk()
fenetre.title("Formulaire de connexion")
fenetre.geometry("320x200")
tk.Label(fenetre, text="Identifiant :").pack(anchor="w", padx=20, pady=(15, 2))
champ_login = tk.Entry(fenetre, width=28)
champ_login.pack(padx=20)
tk.Label(fenetre, text="Mot de passe :").pack(anchor="w", padx=20, pady=(10, 2))
champ_mdp = tk.Entry(fenetre, width=28, show="•") # masque la saisie
champ_mdp.pack(padx=20)
def connexion():
print(f"Login : {champ_login.get()}")
print(f"MDP : {champ_mdp.get()}") # get() retourne le vrai texte
tk.Button(fenetre, text="Connexion", command=connexion).pack(pady=15)
fenetre.mainloop()
show="•" est le caractère le plus courant pour les mots de passe, mais n'importe quel caractère fonctionne — show="*" ou show="x" par exemple. La méthode get() retourne toujours le texte réel, quel que soit le symbole affiché.
Surveiller la saisie en temps réel avec StringVar
Pour réagir à chaque frappe — activer un bouton dès que le champ est rempli, filtrer une liste en direct — on lie le champ à une StringVar et on pose un trace dessus :
import tkinter as tk
fenetre = tk.Tk()
fenetre.geometry("350x140")
contenu = tk.StringVar()
def sur_changement(*args):
texte = contenu.get()
# Active le bouton seulement si le champ n'est pas vide
if texte.strip():
btn_envoyer.config(state="normal")
else:
btn_envoyer.config(state="disabled")
contenu.trace_add("write", sur_changement)
champ = tk.Entry(fenetre, textvariable=contenu, width=30)
champ.pack(pady=20)
btn_envoyer = tk.Button(fenetre, text="Envoyer", state="disabled")
btn_envoyer.pack()
fenetre.mainloop()
Le bouton "Envoyer" reste grisé tant que le champ est vide et s'active dès qu'un caractère est tapé. Ce mécanisme fonctionne aussi avec Checkbutton ou Combobox quand on veut synchroniser plusieurs widgets.
Par carabde | Mis à jour le 30 avril 2025