Construire un formulaire de connexion avec Tkinter et le widget Entry

Le widget Entry de Tkinter est l’un des outils les plus utilisés pour collecter une saisie utilisateur dans une application graphique Python. Pour comprendre son fonctionnement dans un cas réel, on va créer une petite fenêtre de connexino complète : deux champs de saisie (identifient et mot de passe), un bouton de validation, une option pour révéler le mot de passe, et une validation minimale des entrées.

  1. Structure de la fenêtre avec une grille

Plutôt que d’utiliser pack, on organise les composants avec grid, qui offre un meilleur contrôle sur l’alignement. On encapsule l’ensemble dans un Frame pour ajouter facilement des marges.

import tkinter as tk
from tkinter import ttk, messagebox


class AppLogin:
    def __init__(self, master):
        self.master = master
        self.master.title("Portail de connexion")
        self.master.geometry("360x260")
        self.master.resizable(False, False)

        self.cadre = ttk.Frame(self.master, padding=20)
        self.cadre.grid(row=0, column=0)

        # Champ identifiant
        ttk.Label(self.cadre, text="Identifiant :").grid(
            row=0, column=0, sticky="w", pady=(0, 5)
        )
        self.identifiant = tk.StringVar()
        self.entrée_id = ttk.Entry(self.cadre, textvariable=self.identifiant, width=28)
        self.entrée_id.grid(row=1, column=0, columnspan=2, pady=(0, 10))

        # Champ mot de passe
        ttk.Label(self.cadre, text="Mot de passe :").grid(
            row=2, column=0, sticky="w", pady=(0, 5)
        )
        self.mdp = tk.StringVar()
        self.entrée_mdp = ttk.Entry(
            self.cadre, textvariable=self.mdp, show="•", width=28
        )
        self.entrée_mdp.grid(row=3, column=0, columnspan=2, pady=(0, 5))

        # Option d'affichage du mot de passe
        self.afficher_mdp = tk.BooleanVar()
        ttk.Checkbutton(
            self.cadre,
            text="Afficher le mot de passe",
            variable=self.afficher_mdp,
            command=self.basculer_masque,
        ).grid(row=4, column=0, columnspan=2, sticky="w", pady=(0, 15))

        # Boutons d'action
        ttk.Button(
            self.cadre, text="Se connecter", command=self.vérifier
        ).grid(row=5, column=0, sticky="ew", padx=(0, 5))
        ttk.Button(
            self.cadre, text="Quitter", command=self.master.quit
        ).grid(row=5, column=1, sticky="ew", padx=(5, 0))

        # Focus initial
        self.entrée_id.focus_set()

La classe regroupe l’interface et sa logique. StringVar sert de lien entre les variables Python et les widgets Entry. Le paramètre show="•" masque les caractères du mot de passe dès la saisie.

  1. Activer et désactiver le masquage du mot de passe

Une simple case à cocher permet de passer du mode masqué au mode visible. La méthode config modifie le paramètre show à la volée.

    def basculer_masque(self):
        if self.afficher_mdp.get():
            self.entrée_mdp.config(show="")
        else:
            self.entrée_mdp.config(show="•")

Quand la case est cochée, show devient une chaîne vide et le texte s’affiche en clair. Dès qu’on la décocher, les caractères sont à nouveau remplacés par des points.

  1. Validation des informations saisies

La méthode de validation récupère les contenus des champs, suppprime les espaces inutiles et vérifie que rien n’est vide avant d’aller plus loin.

    def vérifier(self):
        utilisateur = self.identifiant.get().strip()
        mot_de_passe = self.mdp.get().strip()

        if not utilisateur:
            messagebox.showwarning("Champ manquant", "Veuillez saisir un identifiant.")
            self.entrée_id.focus_set()
            return

        if not mot_de_passe:
            messagebox.showwarning("Champ manquant", "Veuillez saisir un mot de passe.")
            self.entrée_mdp.focus_set()
            return

        # Exemple de vérification simple
        if utilisateur == "admin" and mot_de_passe == "s3cr3t":
            messagebox.showinfo("Connexion réussie", f"Bienvenue, {utilisateur} !")
        else:
            messagebox.showerror("Échec", "Identifiants incorrects.")
            self.mdp.set("")
            self.entrée_mdp.focus_set()

La méthode focus_set replace le curseur dans le champ concerné, ce qui améliore l’expérience utilisateur. On peut remplacer le test d’identifiants par une requête réelle vers une base de données ou un service d’authentification.

  1. Lancement de l’application

Il suffit d’instancier la classe et de lancer la boucle événementielle.

if __name__ == "__main__":
    racine = tk.Tk()
    AppLogin(racine)
    racine.mainloop()

mainloop garde la fenêtre ouverte et réactive : sans cet appel, les widgets ne seraient pas affichés et les interactions ne seraient pas traitées. Le code complet peut être copié dans un seul fichier et exécuté directement.

Étiquettes: Python Tkinter Entry GUI Authentification

Publié le 10 juillet à 05h15