Formation PUB400 : Python, 2018 Environnement graphique tkinter

9.10 Assigner du code à un événement


Il existe plusieurs événements qui peuvent déclencher l'exécution d'une fonction, par exemple :

  • bouton cliqué
  • touche du clavier appuyée
  • fin du programme
  • widget qui prend le focus
  • widget qui change d'état (activé / désactivé)
  • etc.

Concentrons-nous pour le moment sur les plus fréquents : un clic sur un bouton et une touche de clavier appuyée.

Clic sur un bouton

Lorsqu'une interface graphique contient un bouton, il faut indiquer au programme quoi faire quand le bouton sera cliqué.

On lui fournira le nom de la fonction à exécuter, sans les parenthèses.

Il existe différentes techniques pour y arriver :

  • Paramètre command du constructeur du bouton :
    Python

    bouton = Button(fenetre, text='Soumettre', command=ma_fonction)

  • Paramètre command de la méthode configure() :
    Python

    bouton.configure(command=ma_fonction)

  • Méthode bind() :
    Python

    fenetre.bind('<Button-1>', ma_fonction)

Dans tous les cas, il est possible d'utiliser une fonction existante dans Python (ex : fenetre.destroy) ou encore de coder notre propre fonction.

Une fonction associée au paramètre command ne recevra pas de paramètre. Une fonction assiciée avec bind() recevra le paramètre event.

Le paramètre, s'il y a lieu, ne sera écrit que lors de la définition de la fonction. Dans l'instuction qui associe la fonction à un événement, seul le nom de la fonction sera écrit, sans apostrophes ni guillemets ni parenthèses.

Il est à noter que la fonction doit être déclarée AVANT de pouvoir être utilisée. Elle sera donc déclarée dans le haut du fichier.

Ex :

Python

#!/usr/bin/env python

 

from tkinter import *

from tkinter import messagebox

 

def cliquer_click():

    """Affiche un message indiquant que le bouton a été cliqué."""

    messagebox.showinfo('Information', 'Le bouton a été cliqué !')

 

########## programme principal ##########

 

# fenêtre principale

fenetre = Tk()

 

# bouton

bouton = Button(fenetre, text='Cliquer ici !', command=cliquer_click)

bouton.pack()

 

# la fenêtre s'affiche puis attend les interactions de l'usager

fenetre.mainloop()

Touche du clavier

Il est possible d'associer du code à une touche de clavier à l'aide de bind() en utilisant le code de la touche désirée, placé entre chevrons (<>).

La fonction devra recevoir un paramètre de type Event, que l'on nommera généralement event.

Ex :

Python

#!/usr/bin/env python

 

from tkinter import *

from tkinter import messagebox

 

def touche_entree(event):

    """Affiche un message indiquant que la touche Entrée a été pressée."""

    messagebox.showinfo('Information', 'La touche Entrée a été pressée !')

 

########## programme principal ##########

 

# fenêtre principale

fenetre = Tk()

fenetre.bind('<Return>', touche_entree)

 

...

 

# la fenêtre s'affiche puis attend les interactions de l'usager

fenetre.mainloop()

Pour plus d'information

« Événements: répondre aux actions de l’utilisateur ». Tkinter pour ISN. http://tkinter.fdex.eu/doc/event.html

« Events and Bindings ». effbot.org. http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm

▼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