web-dev-qa-db-fra.com

Avoir plusieurs commandes lorsque le bouton est enfoncé

Je veux exécuter plusieurs fonctions lorsque je clique sur un bouton. Par exemple, je veux que mon bouton ressemble à

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

lorsque j'exécute cette instruction, j'obtiens une erreur car je ne peux pas affecter deux fois un objet à un argument. Comment puis-je faire en sorte que la commande exécute plusieurs fonctions.

7
user1876508

Vous pouvez créer une fonction générique pour combiner des fonctions, cela pourrait ressembler à ceci:

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

Ensuite, vous pouvez créer votre bouton comme ceci:

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

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

peut être?

Je suppose que vous pourriez faire quelque chose comme

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

mais c'est vraiment dégoûtant ...

11
Joran Beasley

Vous pouvez simplement utiliser lambda comme ceci:

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

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

2
chibbbb

Vous pouvez utiliser le lambda pour cela:

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

J'ai aussi trouvé cela, qui fonctionne pour moi. Dans une situation comme ...

b1 = Button(master, text='FirstC', command=firstCommand)
b1.pack(side=LEFT, padx=5, pady=15)

b2 = Button(master, text='SecondC', command=secondCommand)
b2.pack(side=LEFT, padx=5, pady=10)

master.mainloop()

... tu peux faire...

b1 = Button(master, command=firstCommand)
b1 = Button(master, text='SecondC', command=secondCommand)
b1.pack(side=LEFT, padx=5, pady=15)

master.mainloop()

Ce que j'ai fait était de renommer la deuxième variable b2 de la même manière que le premier b1 et de supprimer, dans la solution, le texte du premier bouton (de sorte que seul le second est visible et agira comme un seul).

J'ai aussi essayé la solution fonctionnelle, mais pour une raison obscure, cela ne fonctionne pas pour moi. 

0
Link