Problème lors de création de menus.
Bonjour,
lorsque je créé un menu avec sa barre de menu, je désire transmettre un argument vers une fonction avec l'instruction "lambda".
Aux lignes 19 à 24 de mon code, l'argument est transmis correctement à la fonction "action".
Aux lignes 13 à 16 de mon code (qui est une écriture plus concise que celle des lignes 19 à 24), l'argument n'est pas transmis correctement à la fonction "action".
Comment se fait-il qu'une méthode transmette l'argument correctement et pas l'autre?
Merci d'avance pour vos réponses.
Voici mon code (attention, j'utilise la version 3.x de Python):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| from tkinter import *
class Application(Frame):
def __init__(self):
Frame.__init__(self)
self.pack()
menuPrincipal = Menubutton(self, text='Fichier')
menuPrincipal.pack(side =LEFT)
me1 = Menu(menuPrincipal)
#Méthode concise pour créér la barre de menu mais avec erreur:
for lab, param in ( ('Débutant 1',(9,9,10)), ('Interm 1',(16,16,40)),
('Expert 1',(30,16,99)) ):
me1.add_command(label =lab,
command = lambda: self.action(param))
#Méthode plus longue pour créér la barre de menu mais sans erreur:
me1.add_command(label ='Débutant 2',
command = lambda: self.action((9,9,10)))
me1.add_command(label ='Interm 2',
command = lambda: self.action((16,16,40)))
me1.add_command(label ='Expert 2',
command = lambda: self.action((30,16,99)))
menuPrincipal.configure(menu = me1)
def action(self, param):
print (param)
if __name__ == '__main__':
Application().mainloop() |