2012-12-13 1 views
5

Ich möchte mehrere Funktionen ausführen, wenn ich auf eine Schaltfläche klicke. Zum Beispiel möchte ich meine TasteHaben mehrere Befehle, wenn die Taste gedrückt wird

self.testButton = Button(self, text = "test", 
         command = func1(), command = func2()) 

aussehen, wenn ich diese Aussage, die ich erhalte eine Fehlermeldung ausführen, weil ich nicht zweimal etwas zu einem Argumente zuordnen kann. Wie kann ich veranlassen, dass mehrere Funktionen ausgeführt werden?

Antwort

17

Sie könnten eine generische Funktion zum Kombinieren Funktionen erstellen, ist es in etwa so aussehen könnte:

def combine_funcs(*funcs): 
    def combined_func(*args, **kwargs): 
     for f in funcs: 
      f(*args, **kwargs) 
    return combined_func 

Dann könnten Sie Ihre Schaltfläche wie folgt erstellen:

self.testButton = Button(self, text = "test", 
         command = combine_funcs(func1, func2)) 
10
def func1(evt=None): 
    do_something1() 
    do_something2() 
    ... 

self.testButton = Button(self, text = "test", 
         command = func1) 

vielleicht?

Ich denke, vielleicht haben Sie so etwas wie

self.testButton = Button(self, text = "test", 
         command = lambda x:func1() & func2()) 

tun könnten, aber das ist wirklich gross ...

+1

eine Funktion definieren zu tun, was Sie wollen, ist wahrscheinlich die beste Lösung. Etwas von der Logik in den Knopf selbst zu stecken, erscheint mir eklig und ein potenzielles Wartungsproblem später. – PeterBB

1

Sie das Lambda für diese verwenden:

self.testButton = Button(self, text = "test", lambda: [f() for f in [func1, funct2]]) 
2

Sie einfach Lambda wie diese verwenden:

self.testButton = Button(self, text=" test", command=lambda:[funct1(),funct2()]) 
0

Button(self, text="text", command=func_1()and func_2)

+4

Während dieser Code die Frage beantworten kann, verbessert ein zusätzlicher Kontext, warum und/oder wie dieser Code die Frage beantwortet, seinen langfristigen Wert. – adiga