Gestionnaire d'événement pour les boutons
Définition : Bouton
Un bouton est un contrôle[1] contenant un texte. Il doit être placé soit dans une fenêtre. Un bouton peut être inactif (disabled), pressé (pressed), normal, avoir le focus (les entrées clavier sont redirigées vers le bouton),, courant (la souris est au dessus du bouton).
Quand le bouton est pressé un événement wx.EVT_BUTTON est généré.
Exemple : utilisation de boutons
Dans ce programme, deux boutons sont ajoutés à la fenêtre. Un gestionnaire d'événement (pour wx.EVT_BUTTON
) est associé à chaque bouton. Lorsque l'on clique sur ces boutons, le gestionnaire d'événement affiche le numéro du bouton dans la console et le texte du bouton est changé.
Cet exemple crée une classe MaFenetre
. Le constructeur de MaFenetre
construit deux objets boutons en appelant le constructeur wx.Button
. L'identifiant du premier bouton est 1000, son texte est X, sa position dans la fenêtre est (20,25) et sa taille est de 50 (largeur) par 20(hauteur).
class MaFenetre(wx.Frame):
def __init__(self):
super().__init__(parent=None, title='Ma fenêtre avec bouton')
bouton1 = wx.Button(self, id=1000, label='X', pos=(20, 25),size=(50,20))
bouton2 = wx.Button(self, id=1010, label='I', pos=(50, 55),size=(50,50))
L'appel de la méthode Bind
permet d'exécuter lorsqu'un événement wx.EVT_BUTTON
se produit la méthode OnBouton
si l'un des boutons est pressé.
self.Bind(wx.EVT_BUTTON, self.OnBouton, bouton1)
self.Bind(wx.EVT_BUTTON, self.OnBouton, bouton2)
Le gestionnaire d'événement des boutons, la méthode OnBouton
de la classe MaFenetre
, affiche dans la console l'identifiant du bouton en utilisant la méthode GetId()
de l'objet event
passé en paramètre.
Le bouton pressé est obtenu en appelant la méthode GetEventObject
()
de l'objet event
passé en paramètre. Le texte de ce bouton est obtenu en appelant la méthode GetLabel()
de la classe wx.Button
.
Une fois le texte obtenu, il est modifié en fonction de son contenu.
def OnBouton(self, event):
print("Bouton ",event.GetId())
button = event.GetEventObject()
s = button.GetLabel()
if s == "X":
button.SetLabel("O")
elif s == "O":
button.SetLabel("X")
if s == "I":
button.SetLabel("-")
elif s == "-":
button.SetLabel("I")
Le programme complet est ici :
import wx
class MaFenetre(wx.Frame):
def __init__(self):
super().__init__(parent=None, title='Ma fenêtre avec bouton')
bouton1 = wx.Button(self, id=1000, label='X', pos=(20, 25),size=(50,20))
bouton2 = wx.Button(self, id=1010, label='I', pos=(50, 55),size=(50,50))
self.Bind(wx.EVT_BUTTON, self.OnBouton, bouton1)
self.Bind(wx.EVT_BUTTON, self.OnBouton, bouton2)
self.Show()
def OnBouton(self, event):
print("Bouton ",event.GetId())
button = event.GetEventObject()
s = button.GetLabel()
if s == "X":
button.SetLabel("O")
elif s == "O":
button.SetLabel("X")
if s == "I":
button.SetLabel("-")
elif s == "-":
button.SetLabel("I")
if __name__ == '__main__':
app = wx.App()
frame = MaFenetre()
app.MainLoop()
Exemple : Associer un gestionnaire d'événement par bouton
Pour chaque bouton, on associe un gestionnaire d'événement (OnBouton1
ou OnBouton2
). Cela permet de simplifier la gestion le traitement de la gestion du label.
import wx
class MaFenetre(wx.Frame):
def __init__(self):
super().__init__(parent=None, title='Hello World')
bouton1 = wx.Button(self, id=1000, label='X', pos=(20, 25),size=(50,20))
bouton2 = wx.Button(self, id=1010, label='I', pos=(50, 55),size=(50,50))
self.Bind(wx.EVT_BUTTON, self.OnBouton1, bouton1)
self.Bind(wx.EVT_BUTTON, self.OnBouton2, bouton2)
self.Show()
def PrintBouton(self, event):
print("Bouton ",event.GetId())
button = event.GetEventObject()
s = button.GetLabel()
return s, button
def OnBouton1(self, event):
s, button = self.PrintBouton(event)
if s == "X":
button.SetLabel("O")
else:
button.SetLabel("X")
def OnBouton2(self, event):
s, button = self.PrintBouton(event)
if s == "I":
button.SetLabel("-")
else:
button.SetLabel("I")
if __name__ == '__main__':
app = wx.App()
frame = MaFenetre()
app.MainLoop()