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.
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))
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 ...
Vous pouvez simplement utiliser lambda comme ceci:
self.testButton = Button(self, text=" test", command=lambda:[funct1(),funct2()])
Button(self, text="text", command=func_1()and func_2)
Vous pouvez utiliser le lambda pour cela:
self.testButton = Button(self, text = "test", lambda: [f() for f in [func1, funct2]])
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.