Bonjour,
Ce n'est pas le même objet, un widget différent est créé a chaque fois. La fonction/procédure lambda est stockée dans le command du widget.
lambda permet de ne pas exécuter une fonction/procédure simple lors de la création.
Exemple:
command=sys.exit(0)
command=lambda:sys.exit(0)
Dans le cade d'un command=lambda
Si c'est une procédure tu peut écrire command=lambda:taprocédure
Ex : command=quit
Si c'est une fonction avec une variable 'fixe'
command=lambda:tafonction(tavariable)
et cela utiliseras lors de l'exécution tavariable telle qu'elle est définie a la fin de la création (ici a la fin du for et si elle n'est pas modifié lors de l'exécution).
Si c'est une variable que tu souhaite utiliser tu dois la nommer dans le lambda (voir le code donné i=i).
i='c' car il est appelé à l'exécution (de l'event) et à l'exécution i='c' car for i in liste est arrivé a la fin de la liste ('c') à la fin de la création des widgets.
Je ne vois pas l'intérét de nommer un widget si tu n'y fais pas rérérence par la suite.
Effectivement dans button_1 = Button(root).pack() (grid, place) button_1=None puisque pack() (grid, place) est une procédure est ne retourne (return) rien.
@+
Edit : bien différencier création et exécution (ici l'event du widget)
Partager