TKINTER : Argument d'une fonction qui ne change pas...
RésoluPhil_1857 Messages postés 1872 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis novice et je fais face à un petit problème sur Tkinter.
Je cherche à créer des boutons dans un programme, cependant le nombre de boutons peut varier et l'argument de la fonction auquel il renvoie aussi.
Le problème c'est que quand j'appuie sur chacun des boutons, cela me renvoie toujours "9" dans la console. Ce que je cherche est que quand j'appuie sur le bouton1, cela me retourne "1", pour le bouton2, "2", pour le bouton3, ect...
from tkinter import * def afficher(i): print(i) fen = Tk() fen.geometry("500x500") for i in range(10): globals()["but_%s" % i] = Button(fen, text=str(i), command=lambda:afficher(i)) globals()["but_%s" % i].pack() fen.mainloop()
Merci
Windows / Chrome 108.0.0.0
- TKINTER : Argument d'une fonction qui ne change pas...
- Tkinter tableau - Forum Python
- Probleme tkinter injustifier - Forum Python
- Pygame ou tkinter ? - Forum Python
- Probleme collision avec tkinter - Forum Python
- Problème avec grid tkinter ✓ - Forum Python
3 réponses
Bonsoir, problème classique, la valeur de i change dans ta boucle, comme sa référence est passée à tes multiples fonctions anonymes, alors normal que tes fonctions retournent la valeur finale de i.
Pour pallier cela, il faut garder la valeur de i dans une variable locale à la fonction.
... command=lambda value=i: afficher(value) ...
On aurait pu la nommer également i
Bonne continuation.
Bonjour,
pourquoi ces noms de boutons avec globals()
ça marche bien sans ça:
from tkinter import * def display(n): print(n) WIDTH, HEIGHT = 600, 600 main_win = Tk() main_win.title('test') main_win.geometry(str(WIDTH)+'x'+str(HEIGHT)+'+500+100') for k in range(5): b = Button(main_win, text=str(k), command=lambda n=k : display(n)) b.pack() main_win.mainloop()