Le widget Entry permet de créer une boîte de saisie.
Il n'y a qu'un paramètre obligatoire : le nom du widget dans lequel la boîte de saisie doit être affichée.
La boîte de saisie sera généralement accompagnée d'un libellé pour indiquer à l'usager ce qu'il doit saisir.
Ex :
libelle = Label(fenetre, text='Entrez votre nom :')
libelle.pack()
nom = Entry(fenetre)
nom.pack(pady=10)
Dans formulaire, la taille d'une boîte de saisie devrait donner une indication sur la longueur de l'information attendue.
Ainsi, la boîte pour saisir une année sera plus petite que celle pour saisir un courriel.
Pour ajuster la taille d'une boîte de saisie, on ajoutera un paramètre width lor de la création de la boîte.
Ex :
# naissance
libelle_naissance = Label(fenetre, text='Année de naissance :')
libelle_naissance.pack()
annee = Entry(fenetre, width=10)
annee.pack(pady=(0, 10))
# courriel
libelle_courriel = Label(fenetre, text='Courriel :')
libelle_courriel.pack()
# boîte de saisie
courriel = Entry(fenetre, width=60)
courriel.pack(pady=(0, 10))
J'attire votre attention sur le paramètre passé à la méthode pack() pour chacune des boîtes de saisie : pady=(0, 10). Ceci signifie qu'il n'y aura aucun espacement en haut de la boîte afin de la garder près de son libellé et un espacement de 10 pixels en bas afin de la séparer du libellé suivant.
Il faut toujours avoir à coeur l'expérience utilisateur lorsqu'on développe une application.
Dès qu'un formulaire est affiché, le point d'insertion devrait être placé automatiquement dans la première case de saisie. Sans cela, l'usager devra cliquer dans la case avant de pouvoir commencer à entrer ses informations.
Pour donner le focus à une boîte de saisie :
nom.focus_set()
Il est possible d'entrer une valeur par programmation dans la boîte de saisie. Si la boîte contenait déjà du texte, l'information sera ajoutée après ce texte.
Ex :
nom.insert(END, 'Toto')
Lorsque l'usager entre du texte dans une boîte de saisie, le programme pourra récupérer ce texte à l'aide de la méthode get().
Ex :
nom_saisi = nom.get()
Parfois, on voudra que l'information entrée dans la boîte de saisie soit effacée. Ceci peut être réalisé comme suit :
nom.delete(0, 'end')
Le traitement des informations saisies sera généralement effectué lorsqu'un bouton aura été cliqué. Voici un programme complet qui saisit un nom puis l'affiche dans un libellé.
#!/usr/bin/env python
from tkinter import *
def soumettre_click():
""" Affiche un message de bienvenue avec le nom saisi. """
message.configure(text='Bonjour ' + nom.get())
########## programme principal ##########
fenetre = Tk()
fenetre.title('Exemple de saisie avec Entry')
fenetre.minsize(width=350, height=75)
# marges intérieures
fenetre.config(padx=20, pady=20)
# libellé
libelle = Label(fenetre, text='Entrez votre nom :')
libelle.pack()
# boîte de saisie
nom = Entry(fenetre)
nom.focus_set() # boîte de saisie par défaut
nom.pack(pady=10)
# libellé pour afficher un message
message = Label(fenetre, text='')
message.pack(padx=10, pady=(0, 10))
# boutons
bouton_soumettre = Button(fenetre, text='Soumettre', command=soumettre_click)
bouton_soumettre.pack(padx=10, pady=(0, 10))
bouton_terminer = Button(fenetre, text='Terminer', command=fenetre.destroy)
bouton_terminer.pack(padx=10, pady=(0, 10))
# la fenêtre s'affiche puis attend les interactions de l'usager
fenetre.mainloop()
Voici un autre exemple complet : notre programme Hello World bonifié.
Remarquez que cet exemple utilise la méthode grid() plutôt que pack() pour positionner les différents éléments dans la fenêtre. Ceci facilite l'alignement des libellés et des boîtes de saisie.
#!/usr/bin/env python
from tkinter import *
def soumettre_click():
"""Ajoute le nom dans le libellé puis affiche le libellé et le bouton pour terminer."""
libelle_hello.configure(text='Hello World, par ' + nom.get())
# supprime le bouton et désactive la boîte de saisie
bouton_soumission.grid_forget()
nom.configure(state=DISABLED)
# affiche le libellé et le bouton pour terminer
libelle_hello.grid(row=2, columnspan=2, padx=10, pady=10)
bouton_terminer.grid(row=3, columnspan=2, padx=5, pady=(5, 15))
def touche_entree(event):
"""Même chose qu'un clic sur le bouton de soumission ou sur terminer quand soumission faite."""
if bouton_terminer.winfo_viewable():
fenetre.destroy()
else:
soumettre_click()
########## programme principal ##########
# fenêtre principale
fenetre = Tk()
fenetre.title('Hello World')
fenetre.bind("<Return>", touche_entree) # bouton par défaut
# libellé
libelle = Label(fenetre, text='Entrez votre nom : ')
libelle.grid(row=0, column=0, sticky=E, padx=10, pady=10)
# zone de saisie
nom = Entry(fenetre, width=30)
nom.focus_set() # boîte de saisie par défaut
nom.grid(row=0, column=1, padx=(0, 15), pady=10)
# bouton de soumission
bouton_soumission = Button(fenetre, text='Dire bonjour !', command=soumettre_click, padx=15, pady=5)
bouton_soumission.grid(row=1, columnspan=2, padx=5, pady=(5, 15))
# libellé pour afficher le nom
libelle_hello = Label(fenetre)
# bouton pour terminer le programme
bouton_terminer = Button(fenetre, text='Terminer', command=fenetre.destroy, padx=15)
# la fenêtre s'affiche puis attend les interactions de l'usager
fenetre.mainloop()
▼Publicité