Ligne de saisie

Il s'agit dans cet exemple d'améliorer l'interaction avec l'utilisateur en prroposant un champ de saisie de texte. Nous aurons ainsi un équivalent de la commande input en mode non graphique.

Le programme proposé dans cet exemple va simuler un formulaire de saisie de mot de passe : entrer mdp

Ce sera aussi l'occasion de découvrir les boîtes de dialogue qui sont des fenêtres toute faites pour un usage précis. Ici, nous afficherons un messsage en cas de mot de passe incorrect : pop up

Mais tout de suite, regardons le programme. Je vous laisse analyser le code pour trouver le mot de passe !


            import tkinter as tk
            import tkinter.messagebox as msgb # boîte de dialogue
            
            def verification():
                if mot_de_passe.get() == 'python':
                    # le mot de passe est bon :
                    # on affiche une boîte de dialogue puis on ferme la fenêtre
                    msgb.showinfo('Résultat','Mot de passe correct.\nAu revoir !')
                    mon_app.destroy()
                else:
                    # le mot de passe est incorrect : on affiche une boîte de dialogue
                    msgb.showwarning('Résultat','Mot de passe incorrect.\nVeuillez recommencer !')
                    mot_de_passe.set('')
            
            # Création de la fenêtre principale (main window)
            mon_app = tk.Tk()
            mon_app.title('Identification requise')
            
            # Création d'un widget Label (texte 'Mot de passe')
            texte1 = tk.Label(mon_app, text='Mot de passe ')
            texte1.grid(row=0, column=0)
            
            # Création d'un widget Entry (champ de saisie)
            mot_de_passe = tk.StringVar()
            ligne_saisie = tk.Entry(mon_app, textvariable=mot_de_passe, show='*', bg='bisque', fg='maroon')
            ligne_saisie.focus_set()
            ligne_saisie.grid(row=0, column=1)
            
            # Création d'un widget Button (bouton Valider)
            tk.Button(mon_app, text='Valider', command=verification).grid(row=0, column=2)
            
            mon_app.mainloop()
            

Tester avec repl.it

Fonctionnement du champ de saisie texte

Le champ de saisie du mot de passe se déclare au moyen de la commande suivante :


            ligne_saisie = tk.Entry(mon_app, textvariable=mot_de_passe, show='*', bg='bisque', fg='maroon')
          

La réponse viendra se positionner dans la variable mot_de_passe qui est un objet StringVar() comme on peut s'en douter à présent (c'est en effet un texte qui sera modifié par l'utilisateur).

Une petite subtilité dans cet exemple est le paramètre show='*' : Celui-ci permet d'afficher des "*" au lieu du mot de passe en clair.

La ligne suivante mérite aussi une petite explication :


            ligne_saisie.focus_set()
            

Celle-ci permet en effet de positionner le curseur dans le champ de saisie afin qu'il n'y ait pas besoin de cliquer dedans avant de commencer à écrire.

La récupération de la saisie de l'utilisateur se fait au moyen de l'appel à la méthode : mot_de_passe.get()

Explication sur les dialogues

Une fenêtre s'affiche avec un message et un bouton OK une fois le mot de passe saisi. Cette fenêtre est en quelque sorte préfabriquée. C'est ce qu'on appelle un dialogue.

Tkinter possède beaucoup de dialogues prédéfinis :

  • pour afficher des messages d'alerte
  • pour sélectionner des couleurs
  • pour sélectionner des fichiers dans le disque dur
  • etc...

Pour utiliser cette foncitonnalité de dialogue d'alerte, nous commencerons par importer la librarie idoine :


            import tkinter.messagebox as msgb
              

Ensuite, l'affichage d'un message se fait par la simple commande :


            msgb.showinfo('Résultat','Mot de passe correct.\nAu revoir !')
            

Cela affiche la fenêtre avec le label et le bouton avec une commande aussi simple qu'un print. magique ! Remarquez au passage le caractère \n permettant de passer à la ligne dans le message.

La commande


            msgb.showwarning('Résultat','Mot de passe incorrect.\nVeuillez recommencer !')
            

est d'usage similaire. Elle affiche un panneau d'avertissement en plus.