Home / Programmazione / Python / Button event in wxPython
Mattepuffo

Button event in wxPython

Button event in wxPython

Oggi vediamo un altro pezzo di wxPython, e cioè come intercettare la pressione di un Button.

Partiamo da un codice base:

import wx

class MainFrame(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, title = "My Frame", size = (800, 800))
        panel = wx.Panel(self, wx.ID_ANY)
       
        btn = wx.Button(parent = panel, id = wx.ID_ANY, label = "Button")

Cosi abbiamo aggiunto un elemento Button, nulla di complicato.

A questo punto, sempre nella classe, creiamo una funzione da richiamare:

def pressed(self):
      print 'OK'

Molto semplice; adesso modifichiamo il costruttore per intercettare l'evento:

btn = wx.Button(parent = panel, id = wx.ID_ANY, label = "Button")
btn.Bind(wx.EVT_BUTTON, self.pressed)

Abbiamo in pratica aggiunto una sola riga.

Alla funzione Bind passiamo due parametri, che sono il tipo di evento da intercettare e la funzione da richiamare.

Come vedete, però, alla funzione non passiamo parametri custom; se ad esempio volessimo passare un altro parametro?:

def pressed(self, str):
      print str

In questo caso, ad esempio, gli passiamo come parametro cosa vogliamo stampare.

Per fare ciò dobbiamo modificare il Bind così:

btn.Bind(wx.EVT_BUTTON, lambda event: self.pressed('CIAO'))

Abbiamo usato una lambda, che in pratica ci permette di creare delle funzioni inline (detta in maniera riassuntiva).