CodeGym /Cours Java /Python SELF FR /Gestion des événements de clics de boutons

Gestion des événements de clics de boutons

Python SELF FR
Niveau 49 , Leçon 4
Disponible

1. Notion de gestion des événements

Dans les applications avec interface graphique, la gestion des événements est le principal mécanisme d'interaction de l'utilisateur avec le programme. Quand un utilisateur clique sur un bouton, entre du texte ou bouge juste la souris, des événements se produisent dans l'application. Ces événements peuvent déclencher des fonctions, modifier l'interface et même changer radicalement le comportement du programme. Imagine que tu es un pote qui jongle habilement avec des pizzas, et chaque pizza est un événement à traiter tant qu'elle est encore chaude !

Appel de fonctions lors du clic sur des boutons

Commençons par quelque chose de simple : savoir comment associer un bouton à une fonction. La logique est simple : on crée un bouton, on attrape le clic et on lance la magie Python. Pour commencer, créons une fenêtre simple avec quelques boutons.


import tkinter as tk

def say_hello():
    print("Salut, utilisateur !")

def count_clicks():
    global count
    count += 1
    print(f"Le bouton a été cliqué {count} fois.")

# Création de la fenêtre principale
root = tk.Tk()
root.title("Gestion des événements")
root.geometry("300x200")

# Création d'un bouton de salutation
hello_button = tk.Button(root, text="Dis bonjour", command=say_hello)
hello_button.pack(pady=10)

# Création d'un compteur de clics
count = 0
count_button = tk.Button(root, text="Compter les clics", command=count_clicks)
count_button.pack(pady=10)

# Lancement de la boucle principale de l'application
root.mainloop()

Dans cet exemple, lorsque tu cliques sur le bouton "Dis bonjour", un message est affiché dans la console, et lorsque tu cliques sur le bouton "Compter les clics", le nombre de clics est calculé.

2. Association d'événements aux widgets

Dans Tkinter, les événements peuvent être liés non seulement aux boutons, mais aussi à d'autres widgets comme les champs de saisie, les cases à cocher et les étiquettes. Ça permet à vos applications de réagir aux changements d'interface comme des chefs expérimentés détectant l'odeur d'une tarte brûlée.

Exemple : changement de couleur d'un bouton lors du clic

Modifions notre exemple pour que le bouton change de couleur lorsqu'on clique dessus.


def change_color():
    current_color = color_button.cget("bg")
    new_color = "yellow" if current_color == "red" else "red"
    color_button.config(bg=new_color)

color_button = tk.Button(root, text="Changer la couleur", bg="red", command=change_color)
color_button.pack(pady=10)

Désormais, le bouton changera de couleur à chaque clic. C'est un exemple simple pour montrer visuellement à l'utilisateur qu'un événement a été traité.

3. Utilisation pratique des événements

Maintenant que tu sais associer des fonctions à des événements, essayons de créer une application plus interactive qui réagira à différents événements. Imagine une application avec un chronomètre qui démarre et s'arrête en appuyant sur un bouton.

Exemple d'application avec un chronomètre

Créons une application où cliquer sur un bouton démarre un chronomètre qui compte les secondes.


import time

def start_timer():
    global running
    if not running:
        running = True
        count_seconds()

def stop_timer():
    global running
    running = False

def count_seconds():
    if running:
        global seconds
        seconds += 1
        time_label.config(text=f"Seconds écoulées : {seconds}")
        root.after(1000, count_seconds)

seconds = 0
running = False

start_button = tk.Button(root, text="Démarrer", command=start_timer)
start_button.pack(side="left", padx=10)

stop_button = tk.Button(root, text="Arrêter", command=stop_timer)
stop_button.pack(side="right", padx=10)

time_label = tk.Label(root, text="Seconds écoulées : 0")
time_label.pack(pady=20)

root.mainloop()

Dans cet exemple, nous avons deux boutons : "Démarrer" et "Arrêter". Cliquer sur "Démarrer" lance le chronométrage, et "Arrêter" l'arrête. Nous utilisons la méthode `after` pour redémarrer la fonction de décompte de temps après une seconde. Cela permet de ne pas bloquer la boucle principale de l'application et d'effectuer d'autres tâches.

4. Gestion des erreurs dans la gestion des événements

Parfois, les programmes peuvent se comporter étrangement, et les fautifs peuvent être des erreurs dans la logique de gestion des événements. Par exemple, si un clic entraîne un traitement incorrect des données ou provoque des effets indésirables. Il est très important de gérer toutes les exceptions possibles et de veiller à ce que toutes les actions de l'utilisateur soient correctement traitées.

Exemple de traitement des exceptions

Ajoutons le traitement des exceptions à notre exemple de chronomètre pour éviter les problèmes, par exemple si le chronomètre était démarré alors qu'il était déjà en cours d'exécution.


def start_timer():
    global running
    try:
        if not running:
            running = True
            count_seconds()
    except Exception as e:
        print(f"Erreur lors du démarrage du chronomètre : {e}")

def stop_timer():
    global running
    try:
        running = False
    except Exception as e:
        print(f"Erreur lors de l'arrêt du chronomètre : {e}")

Désormais, si quelque chose ne va pas lors du démarrage ou de l'arrêt du chronomètre, nous aurons des informations détaillées sur l'erreur.

La gestion des événements est une partie clé de la création d'applications GUI interactives. C'est ce qui permet à ton programme de réagir aux actions de l'utilisateur, et ça rend tes applications plus dynamiques et utiles. Nous avons créé quelques exemples qui donnent une idée de comment associer des événements à des fonctions, modifier l'interface et réagir aux actions de l'utilisateur. Si tu maîtrises ça, le script deviendra ton allié, et les bugs, des ennemis oubliés depuis longtemps.

1
Опрос
Créer une interface graphique avec Tkinter,  49 уровень,  4 лекция
недоступен
Créer une interface graphique avec Tkinter
Créer une interface graphique avec Tkinter
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION