Home > wxPython > wxPython: multipli Bind su bottoni anonimi

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

Categorie:wxPython
  1. luglio 30, 2011 alle 7:40 am

    Ciao, ho molto apprezzato il tuo esempio sui bottoni e ho provato a cambiare le variabili ma ho ottenuto la prima volta usando LANGUAGE IRIS,LANGUAGE ITALIAN;LANGUAGE ITALIAN SWISS, solo dei messaggi di errore in quanto la chiamata a queste costanti non individuava i bottoni e quindi non avevano l’attributo Bin in somma il metodo bin non poteva essere applicato, Scegliendo invece altre variabili di tipo even non ottenevo il cambio di colore ne la stampa a video dell’etichetta del bottone. Le costanti erano wx.EVT_COMMAND_LEFT_CLICK, wx.EVT_COMMAND_KILL_FOCUS, wx.EVT_COMMAND_RIGHT_CLICK
    Quindi per ottenere quello che tu volevi sei stato obbligato ad usare quelle costanti, cè qualche altro modo per ottenere gli stessi risultati.
    Quelle costanti che ho provato io le ho trovate impostando dir(wx)
    Ciao

  2. luglio 30, 2011 alle 8:59 am

    Posta la parte di codice modificata e anche l’errore che ottieni.
    Ciao.

  1. No trackbacks yet.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: