*args und event in einer Funktion zusammen?

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Nebelhom
User
Beiträge: 155
Registriert: Mittwoch 19. Mai 2010, 01:31

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
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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

@Nebelhom: Ich würde auch sagen, dass man hier besser eine Liste übergibt, anstatt einer variablen Anzahl von Argumenten.
Nebelhom
User
Beiträge: 155
Registriert: Mittwoch 19. Mai 2010, 01:31

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.
Antworten