Home > wxpython > wxPython: multipli Bind su bottoni anonimi

wxPython: multipli Bind su bottoni anonimi

15 Maggio 2011

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

Categorie:wxpython Tag:
I commenti sono chiusi.