logo oujood
🔍

Le widget Entry Tkinter

Entry est le champ de saisie d'une ligne en Tkinter. Récupérer, valider, vider, masquer — les opérations courantes avec des exemples concrets.

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 :

📋 Copier le code

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() :

📋 Copier le code

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 :

📋 Copier le code

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 :

📋 Copier le code

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