Parameterübergabe bei wx.Bind()

Plattformunabhängige GUIs mit wxWidgets.
alan
User
Beiträge: 81
Registriert: Dienstag 10. April 2007, 11:30

Parameterübergabe bei wx.Bind()

Beitragvon alan » Dienstag 18. September 2007, 16:19

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?
BlackJack

Beitragvon BlackJack » Dienstag 18. September 2007, 17:57

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
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Beitragvon nkoehring » Dienstag 18. September 2007, 18:22

Oh wie nett. Schickes Ding, Blackjack.

Ich wollte eigentlich "ClientData" vorschlagen, aber das funktioniert nicht bei Buttons, kann das sein??
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Dienstag 18. September 2007, 19:14

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
alan
User
Beiträge: 81
Registriert: Dienstag 10. April 2007, 11:30

Beitragvon alan » Dienstag 18. September 2007, 19:30

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 :)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder