Act-44 : Python / tkinter

Interface Utilisateur tkinter : cahier des charges

Avec tkinter, je souhaite donner à mes étudiants une démonstration simple en python.

Un champ (contrôle permettant la saisie de caractères alphanumériques) Nom qui va saisir le nom d'une personne.

Un contrôle de type liste qui permette de choisir la civilité de la personne "Mr ou Mme ou Vide".

On ajoutera un bouton nommé OK qui exécutera le code selon les directives ci-dessous : concaténer une chaîne composée de "Bonjour ", la civilité sauf si "vide à été choisi", suivie du Nom en majuscule.

La valeur de la variable composée sera affichée dans un label (texte non modifiable)

Le code détaillé

1
import tkinter as tk
2
from tkinter import ttk
3
4
def saluer():
5
    nom = nom_entree.get().upper()  # Récupère le nom et le convertit en majuscules
6
    civilite = civilites_combo.get()
7
    if civilite == "Vide":  # Si "Vide" est sélectionné, ne pas inclure la civilité
8
        message = "Bonjour " + nom
9
    else:
10
        message = "Bonjour " + civilite + " " + nom
11
    message_label.config(text=message)  # Met à jour le texte du label avec le message
12
13
# Création de la fenêtre principale
14
fenetre = tk.Tk()
15
fenetre.title('Démonstration tkinter')
16
17
# Définition et placement du champ de saisie pour le nom
18
nom_label = ttk.Label(fenetre, text="Nom :")
19
nom_label.grid(column=0, row=0, sticky=tk.W, padx=5, pady=5)
20
nom_entree = ttk.Entry(fenetre)
21
nom_entree.grid(column=1, row=0, sticky=tk.EW, padx=5, pady=5)
22
23
# Définition et placement du contrôle de liste pour la civilité
24
civilites_label = ttk.Label(fenetre, text="Civilité :")
25
civilites_label.grid(column=0, row=1, sticky=tk.W, padx=5, pady=5)
26
civilites_combo = ttk.Combobox(fenetre, values=["Mr", "Mme", "Vide"])
27
civilites_combo.grid(column=1, row=1, sticky=tk.EW, padx=5, pady=5)
28
civilites_combo.current(2)  # Définit "Vide" comme valeur par défaut
29
30
# Définition et placement du bouton OK
31
ok_bouton = ttk.Button(fenetre, text="OK", command=saluer)
32
ok_bouton.grid(column=0, row=2, columnspan=2, pady=5)
33
34
# Définition et placement du label d'affichage
35
message_label = ttk.Label(fenetre, text="")
36
message_label.grid(column=0, row=3, columnspan=2, sticky=tk.N, pady=5)
37
38
# Configuration de la gestion du redimensionnement de la grille
39
fenetre.columnconfigure(1, weight=1)
40
fenetre.rowconfigure(3, weight=1)
41
42
fenetre.mainloop()

Explications rapides

Ce script commence par importer les modules nécessaires : tkinter pour l'UI et ttk pour les widgets stylés.

Après avoir défini la fonction qui construit le message de salutation saluer(), il crée l'interface utilisateur avec un champ de saisie pour le nom, une liste déroulante pour la civilité, et un bouton qui, lorsqu'il est cliqué, appelle la fonction saluer().

La fonction met ensuite à jour un label avec le message de salutation personnalisé.