Formation PUB400 : Python, 2018 Environnement graphique tkinter

9.12 Les boîtes de saisie


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 :

Python

libelle = Label(fenetre, text='Entrez votre nom :')

libelle.pack()

 

nom = Entry(fenetre)

nom.pack(pady=10)

Entry

Taille de la zone de saisie

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 :

Python

# 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))

Boîtes de saisie de différentes tailles

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.

Donner le focus à la première boîte de saisie

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 :

Python

nom.focus_set()

Donner une valeur par défaut à la boîte de saisie

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 :

Python

nom.insert(END, 'Toto')

Retrouver l'information saisie

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 :

Python

nom_saisi = nom.get()

Réinitialiser la boîte de saisie

Parfois, on voudra que l'information entrée dans la boîte de saisie soit effacée. Ceci peut être réalisé comme suit :

Python

nom.delete(0, 'end')

Un exemple

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é.

Python

#!/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()

Exemple avec tkinter Exemple avec tkinter - après soumission du nom

Hello World bonifié

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.

Python

#!/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()

Hello World avec saisie Hello World avec saisie (suite)

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre