Maison >développement back-end >Tutoriel Python >Pourquoi mon bouton Tkinter exécute-t-il sa commande immédiatement au lieu d'un clic ?

Pourquoi mon bouton Tkinter exécute-t-il sa commande immédiatement au lieu d'un clic ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-03 15:50:39950parcourir

Why Does My Tkinter Button Execute Its Command Immediately Instead of On Click?

Pourquoi l'exécution immédiate d'une commande de bouton lors de la création ?

Dans Tkinter, l'attribution d'une commande à un bouton peut entraîner un comportement inattendu lorsque la commande s'exécute immédiatement lors de la création du bouton, pas lorsqu'on clique dessus. Cela est dû à la façon dont fonctionne l'option de commande.

Lorsque vous spécifiez un paramètre de commande comme Button(... command=button('hey')), vous transmettez en fait le résultat de l'appel de bouton(' hey') à l'option de commande. Cela signifie que la fonction du bouton est exécutée immédiatement et que la valeur renvoyée est affectée au paramètre de commande.

Solution : Passer une référence à une fonction

Pour éviter cela problème, vous devez transmettre une référence à la fonction au lieu de l'exécuter immédiatement. Cela peut être fait à l'aide des fonctions lambda, functools.partial ou d'une fonction intermédiaire.

Utilisation des fonctions Lambda

Les fonctions Lambda offrent un moyen simple de créer des fonctions anonymes qui peuvent servir de référence. Par exemple :

b = Button(... command=lambda: button('hey'))

Cette fonction lambda crée une fonction sans nom qui, lorsqu'elle est appelée, exécute la fonction bouton avec l'argument « hé ». Cette référence peut ensuite être passée au paramètre de commande du bouton.

Approches alternatives

  • Functools.partial : Cette fonction permet vous de créer une nouvelle fonction qui applique partiellement des arguments à une fonction existante.
  • Intermédiaire Fonction :Vous pouvez créer une fonction distincte qui enveloppe simplement la fonction du bouton avec les arguments souhaités.

Conclusion

En passant une référence à un fonction au lieu de l'exécuter immédiatement, vous pouvez vous assurer que la commande du bouton s'exécute uniquement lorsque vous cliquez sur le bouton, comme prévu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn