Fonction lambda dans widget Button
Résolu/Fermé
A voir également:
- Tkinter button command
- Sfc scannow command - Guide
- Flush dns command - Guide
- Command line mac - Guide
- Command cmd - Guide
- Echo off command ✓ - Forum Autoit / batch
8 réponses
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 26 mars 2022 à 13:33
Modifié le 26 mars 2022 à 13:33
Bonjour,
btn= Button(root,text='My Button',command=(lambda x:x.destroy())(btn) )
(btn): btn n'est pas encore défini puisque tu es en train de le définir dans cette même instruction (btn = Button...)
je crois savoir d'ou vient le problème pour définir une première fois
tu utilise la variable
btn
tu utilise la variable
btn
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
Modifié le 26 mars 2022 à 13:52
Modifié le 26 mars 2022 à 13:52
Ben oui, c'est le serpent qui se mord la queue...
Il faut un 2eme bouton pour détruire btn, et pas besoin de lambda:
Il faut un 2eme bouton pour détruire btn, et pas besoin de lambda:
root=Tk() root.geometry('500x200') btn= Button(root,text='My Button') btn.pack(pady = 20) bt= Button(root,text='Détruis My Button',command= btn.destroy) bt.pack(pady = 20) root.mainloop()
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
voilà une solution
Ton problème était que tu utilisait pour créer ta variable cette meme variable qui n'existait pas encore.
Donc il falait la définir une première fois puis la modifier.
Quand a la fonction elle palie a un autre problème que tu aurait eu en mettant le simple code dans la variable.
from tkinter import * root=Tk() btn = Button() def command(): (lambda x: x.destroy())(btn) btn = Button(root,text='My Button',command=command) btn.pack() root.mainloop() #Script by C Dedev
Ton problème était que tu utilisait pour créer ta variable cette meme variable qui n'existait pas encore.
Donc il falait la définir une première fois puis la modifier.
Quand a la fonction elle palie a un autre problème que tu aurait eu en mettant le simple code dans la variable.
yg_be
Messages postés
23361
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 novembre 2024
1 556
27 mars 2022 à 20:32
27 mars 2022 à 20:32
@ C-Dedev:
pourquoi écrire
et pas
pourquoi écrire
(lambda x: x.destroy())(btn)
et pas
btn.destroy()?
C_Dedev
>
yg_be
Messages postés
23361
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 novembre 2024
27 mars 2022 à 20:45
27 mars 2022 à 20:45
j'ai réutilisé sa commande sans me poser de question
(et vous l'aviez déja corrigé la dessus)
(et vous l'aviez déja corrigé la dessus)
from tkinter import * root=Tk() btn0 = Button() btn1 = Button() def command(): (lambda x: x.destroy())(btn0) btn0 = Button(root,text='My Button',command=command) btn1 = Button(root,text='My Button',command=command) btn0.pack() btn1.pack() root.mainloop() #Script by C Dedev
voilà pour toi .Là les deux boutons font exactement la meme chose (supprimer le bouton 0) mais si tu veux que chacun se détruise lui meme tu peux toujours faire une autre fonction
yg_be
Messages postés
23361
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 novembre 2024
Ambassadeur
1 556
27 mars 2022 à 11:33
27 mars 2022 à 11:33
bonjour,
peut-être ainsi:
peut-être ainsi:
import tkinter root=tkinter.Tk() btn= tkinter.Button(root,text='My Button1') btn.configure(command=btn.destroy ) btn.pack() root.mainloop()
yg_be
Messages postés
23361
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 novembre 2024
Ambassadeur
1 556
Modifié le 27 mars 2022 à 11:44
Modifié le 27 mars 2022 à 11:44
Plus généralement, si tu veux utiliser la même fonction pour plusieurs boutons, tout en passant à la fonction l'identité du bouton, ou un paramètre spécifique au bouton:
import tkinter def delbout(b): b.destroy() root=tkinter.Tk() btn1= tkinter.Button(root,text='My Button1') btn1.configure(command=(lambda: delbout(btn1) ) ) btn1.pack() btn2= tkinter.Button(root,text='My Button2') btn2.configure(command=(lambda: delbout(btn2) ) ) btn2.pack() root.mainloop()
yg_be
Messages postés
23361
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 novembre 2024
1 556
27 mars 2022 à 11:48
27 mars 2022 à 11:48
Si tu veux passer un paramètre autre que le bouton lui-même, c'est encore plus simple:
import tkinter def printbout(b): print(b) root=tkinter.Tk() btn1= tkinter.Button(root,text='My Button1',command=(lambda: printbout(1) )) btn1.pack() btn2= tkinter.Button(root,text='My Button2',command=(lambda: printbout(2) )) btn2.pack() root.mainloop()