Partage
  • Partager sur Facebook
  • Partager sur Twitter

deux arguments sur une fonction lambda

8 janvier 2022 à 15:42:07

Salut! J'ai un petit problème j'ai l'impression

J'utilise les lambda fonctions avec tkinter, seulement je dois donner deux arguments à cette fonction, sachant que j'initialise le tout depuis une boucle. Si je donne un argument le lambda passe mais si je n'arrive pas à en donner deux avec le bon formalisme. Et si je mets un seul je récupère la dernière valeur de l'autre...

Ceci fonctionne

for annee in self.listeLabelAnnee:
    self.menuGeneral.add_command(label=annee,command=lambda annee=annee:self.general(annee,'0'))

Ceci pose problème

for annee,listeMois in self.dictLabelMois.items():
     for i in range(len(listeMois)):
          txt=self.dictMois[int(listeMois[i])-1] + ' (' + annee + ')'
          self.menuMois.add_command(label=txt, command= lambda i=i,annee=annee:self.general(annee,listeMois[i]))
     self.menuMois.add_separator()

Une idée pour passer outre ce petit truc?

-
Edité par LeMecSansNom 8 janvier 2022 à 15:42:53

  • Partager sur Facebook
  • Partager sur Twitter
8 janvier 2022 à 16:13:25

Il y a 3 variables à geler dans les arguments par défaut: vous avez omis listeMois.
  • Partager sur Facebook
  • Partager sur Twitter
8 janvier 2022 à 17:54:50

self.menuMois.add_command(label=txt,command=lambda i=i,annee=annee,listeMois=listeMois:self.general(annee,listeMois[i]))
Ceci fonctionne en effet!!
Ce qui ne fonctionnait pas c'était ça
self.menuMois.add_command(label=txt,command=lambda annee=annee,listeMois[i]=listeMois[i]:self.general(annee,listeMois[i]))
Ce qui générait des erreurs :((( 
Merci pour la remarque
  • Partager sur Facebook
  • Partager sur Twitter
8 janvier 2022 à 18:57:53

Le paramètre d'une fonction doit être une variable simple pas une chose comme listeMois[i]... mais vous auriez aussi pu écrire:

    self.menuMois.add_command(label=txt,command=lambda annee=annee,mois=listeMois[i]:self.general(annee, mois)



  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
8 janvier 2022 à 19:29:45

mps a écrit:

Le paramètre d'une fonction doit être une variable simple pas une chose comme listeMois[i]... mais vous auriez aussi pu écrire:

    self.menuMois.add_command(label=txt,command=lambda annee=annee,mois=listeMois[i]:self.general(annee, mois)


Si on suppose que annee, ListeMois et i sont définis en amont, ne peut-on pas faire :

self.menuMois.add_command(label=txt,command=lambda: self.general(annee, ListeMois[i]))

Non ??

-
Edité par Anonyme 8 janvier 2022 à 19:37:15

  • Partager sur Facebook
  • Partager sur Twitter
8 janvier 2022 à 19:52:45

Diablo76 a écrit:


Si on suppose que annee, ListeMois et i sont définis en amont, ne peut-on pas faire :

self.menuMois.add_command(label=txt,command=lambda: self.general(annee, ListeMois[i]))

Non ??

on peut, on peut... mais lorsque la fonction sera appelée ce sera avec les dernières valeurs de i et de listeMois et d'après ce que j'ai compris, ce n'est pas ce qu'on veut.

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme