2012-12-13 16 views
5

Chcę uruchomić wiele funkcji po kliknięciu przycisku. Na przykład chcę mój przycisk wyglądaćMieć wiele komend po naciśnięciu przycisku

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

kiedy wykonać to stwierdzenie pojawia się błąd, ponieważ nie mogę przeznaczyć coś argument dwukrotnie. W jaki sposób można wykonać polecenie wykonać wiele funkcji.

Odpowiedz

17

Można by utworzyć funkcję rodzajowe dla łączenia funkcji, może to wyglądać mniej więcej tak:

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

Następnie można utworzyć przycisk tak:

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) 

może?

Chyba może można zrobić coś takiego

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

ale to naprawdę brutto ...

+1

Definiowanie funkcji, aby robić to, co chcesz, jest prawdopodobnie najlepszym rozwiązanie. Umieszczenie niektórych elementów logiki w samym przycisku wydaje mi się równie nieprzyjemne, a później potencjalny problem z utrzymaniem. – PeterBB

1

Można użyć lambda dla tego:

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

można po prostu użyć lambda tak:

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

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

+4

Podczas gdy ten kod może odpowiedzieć na pytanie, podanie dodatkowego kontekstu dotyczącego tego, dlaczego i/lub jak ten kod odpowiada na pytanie, poprawia jego długoterminową wartość. – adiga

Powiązane problemy