wxPython: multipli Bind su bottoni anonimi
Ho avuto necessità di utilizzare più Bind sullo stesso pulsante, che però, non è associato durante la creazione a nessuna variabile.
Questo perchè era necessario creare n-bottoni.
Nell’esempio i bottoni sono 3, ma potrebbero essere molti di più.
Chiaramente associando ogni bottone ad una differente variabile, tutto sarebbe più facile,
ma il codice diventerebbe ripetitivo e poi mi sono voluto complicare la vita.
Voglio, in sostanza, stampare a video la label del pulsante, quando premuto, ma anche cambiargli lo sfondo, entrando nella propria area con il puntatore del mouse, e ricolorarlo come prima, uscendone.
Il codice funzionante è il seguente
import wx class TestFrame(wx.Frame): def __init__(self, *args, **kwargs): wx.Frame.__init__(self, *args, **kwargs) self.panel = wx.Panel(self) x_pos = 5 for label in ['a', 'b', 'c']: wx.Button(self.panel, wx.ID_ANY, label, (x_pos, 0), (50, 50)) x_pos += 50 self.Show() class Controller(object): def __init__(self): self.frame = TestFrame(None, -1, 'Test', size = (200, 200)) for child in self.frame.panel.GetChildren(): child.SetBackgroundColour('Pink') child.Bind(wx.EVT_BUTTON, self.on_click) child.Bind(wx.EVT_ENTER_WINDOW, self.on_entry) child.Bind(wx.EVT_LEAVE_WINDOW, self.on_exit) def on_click(self, event): btn = event.GetEventObject() print btn.GetLabel() def on_entry(self, event): btn = event.GetEventObject() btn.SetBackgroundColour('Yellow') event.Skip() def on_exit(self, event): btn = event.GetEventObject() btn.SetBackgroundColour('Pink') def starter(): app = wx.PySimpleApp() Controller() app.MainLoop() if __name__ == '__main__': starter()
ringrazio anche il forum di python.it.org per l’aiuto, in quanto dimenticandomi un skip(), sull’evento ENTRY_WINDOWS, non riuscivo a far funzionare il codice correttamente.
Piccoli programmatori crescono….
link utili: events
Commenti recenti