Seite 1 von 1

Parameterübergabe bei wx.Bind()

Verfasst: Dienstag 18. September 2007, 16:19
von alan
Hallo

Ich habe eine Reihe von Buttons, deren einzige Aufgabe es ist, einen konstanten Zahlenwert zu übergeben.

Momentan würde ich das so lösen:

Code: Alles auswählen

self.Bind(wx.EVT_BUTTON, self.OnButton0, button0)
self.Bind(wx.EVT_BUTTON, self.OnButton1, button1)
self.Bind(wx.EVT_BUTTON, self.OnButton2, button2)
Wobei dann die "OnButton"s so aussähen:

Code: Alles auswählen

def OnButton0(self, event):
    self.value = 0
def OnButton1(self, event):
    self.value = 1
def OnButton2(self, event):
    self.value = 2
Ist natürlich nicht sehr elegant und ziemlich schreibaufwendig und ich würde das gerne abkürzen. Gibt es eine Möglichkeit, bei self.Bind der Funktion, die das Event behandeln soll, auch noch einen weiteren Parameter (z.B. value) zu übergeben?

Verfasst: Dienstag 18. September 2007, 17:57
von BlackJack
Eine Möglichkeit (ungetestet):

Code: Alles auswählen

from functools import partial

    # ...
        self.Bind(wx.EVT_BUTTON, partial(self.OnButtonX, value=0), button0)
        self.Bind(wx.EVT_BUTTON, partial(self.OnButtonX, value=1), button1)
        self.Bind(wx.EVT_BUTTON, partial(self.OnButtonX, value=2), button2)
        # ...
    
    def OnButtonX(self, event, value):
        self.value = value

Verfasst: Dienstag 18. September 2007, 18:22
von nkoehring
Oh wie nett. Schickes Ding, Blackjack.

Ich wollte eigentlich "ClientData" vorschlagen, aber das funktioniert nicht bei Buttons, kann das sein??

Verfasst: Dienstag 18. September 2007, 19:14
von HWK
partial ist wohl auch Python 2.5?
Warum nicht einfach mit lambda:

Code: Alles auswählen

self.Bind(wx.EVT_BUTTON, lambda x=0: self.value = x, button0)
MfG
HWK

Verfasst: Dienstag 18. September 2007, 19:30
von alan
Thx BlackJack, das schaut so aus, als wärs genau das was ich brache.

@HWK
Das ist sicher auch nicht schlecht, aber mit BlackJacks Vorschlag kann man halt auch noch mehr Anweisungen unterbringen. Und ich hab gerade gemerkt, dass ich das doch brauche :)