Seite 1 von 1

*args und event in einer Funktion zusammen?

Verfasst: Freitag 30. Juli 2010, 00:17
von Nebelhom
Hi,

habe mal wieder ein kleines Problem.

Ich wuerde gerne via checkbox verschiedene widget aktivieren bzw. deaktivieren je nach zustand der checkbox. Dieses arrangement habe ich fuer verschiedene "tabs" in einem wxNotebook.

Da jeder tab potentiell eine andere anzahl von widgets hat, die man mit Disable() bzw Enable() anrufen kann, dachte ich mir, mache ich eine generelle function mit *args als variable anzahl von argumenten (siehe darunter):

Code: Alles auswählen

    def onCheck(self, checkbox, *args, event): # gives a syntax error pointing to event as argument
        
        if checkbox.GetValue: # the checkbox is ticked
            for arg in args:       # iterate of tuple
                arg.Enable()
            
        else: # the checkbox is un-ticked 
            for arg in args:
                arg.Disable()


Der function call waere dann in meiner bluehenden Fantasie, in der alles geht, folgender:

Code: Alles auswählen

wx.EVT_CHECKBOX(self, id, partial(self.onCheck, *args)) # Gives a syntax error
Das problem ist jetzt, dass anscheinend sowohl *args als auch event als letztes argument stehen muss. Kennt jemand von euch einen weg, um dieses Problem herum? Habe leider nix gefunden in meiner suche nach antwort (Mark Lutz - Learning Python und google)

Es waere gut, wenn man das ganze mit einer funktion auffangen koennte anstatt fuer jeden tab eine andere funktion zu schreiben, weil das relativ viele tabs sind und ich wiederholen sehr unuebersichtlich finde.

Ich hoffe, ich habe nichts unglaublich offensichtliches uebersehen und eure zeit vergeudet.

Ich danke schonmal fuer euer feedback.

Gruss

Nebelhom

Re: *args und event in einer Funktion zusammen?

Verfasst: Freitag 30. Juli 2010, 02:06
von cofi
Warum willst du denn ueberhaupt var-args nuetzen? Bzw warum reicht dir keine normale Sequenz?
var-args muss das letzte positionale Argument sein, weil es _alle_ Argumente nach den "normalen" aufsaugt, `event` als Keyword-Argument waere eine andere Moeglichkeit.

P.S. Am besten die Tracebacks mitliefern, das geraet sonst leicht zu einer Quizrunde.

Re: *args und event in einer Funktion zusammen?

Verfasst: Freitag 30. Juli 2010, 06:30
von BlackJack
@Nebelhom: Ich würde auch sagen, dass man hier besser eine Liste übergibt, anstatt einer variablen Anzahl von Argumenten.

Re: *args und event in einer Funktion zusammen?

Verfasst: Freitag 30. Juli 2010, 08:13
von Nebelhom
Ich muss gestehen, es scheint, dass ich den Wald vor lauter Baeumen nicht mehr gesehen habe. Eine liste als moeglichkeit ist mir da gar nicht aufgefallen. Ich will bei jedem neuem, skript, das ich anfange, etwas neues in Python ausprobieren und lernen, da muss gestern ich so fixiert auf *args und **kargs gewesen sein, dass ich die offensichtliche loesung uebersehen habe :oops:

Danke dass ihr mir die "einfache" Loesung gezeigt habt ;) Ich werde das heute abend dann mal ausprobieren und dann rumheulen, wenn wieder etwas nicht klappt.

Danke fuer eure hilfe.

Nebelhom

P.S. It truly sucks to get stuck.