Maison > Article > développement back-end > Pourquoi le paramètre \"Command\" dans les boutons Tkinter s'exécute-t-il lors de la déclaration ?
Dans tkinter, le paramètre "command" du widget Button est destiné à exécuter un rappel lorsque le bouton est pressé. Cependant, il est curieux de savoir pourquoi la fonction de rappel est exécutée immédiatement après la déclaration, plutôt que lorsque le bouton est cliqué.
La clé réside dans l'évaluation des paramètres lors de la création de l'instance. Lors du passage d'une fonction en tant que paramètre "commande", Python évalue d'abord la fonction, en l'appelant avec tous les arguments passés entre parenthèses. Par exemple, dans le code suivant :
<code class="python">def Hello(): print("Hi there!") hi = Button(frame, text="Hello", command=Hello())</code>
Le code appelle la fonction Hello, renvoyant une valeur None en raison de l'absence d'instruction return, et transmet cette valeur None comme paramètre "commande" au bouton. Par conséquent, le rappel n'est pas exécuté lorsque le bouton est cliqué et l'évaluation initiale affiche "Bonjour!".
Pour remédier à ce problème et garantir que le rappel est exécuté uniquement lorsque le bouton est cliqué, transmettez la fonction lui-même, sans parenthèses :
<code class="python">hi = Button(frame, text="Hello", command=Hello)</code>
Cette modification préserve la fonction Hello en tant qu'objet appelable, qui sera invoqué lors d'un clic sur un bouton.
Comprendre les différences fondamentales entre les objets fonction et leurs valeurs de retour est crucial dans ce contexte. L'objet fonction est référencé par function_name, tandis que function_name() représente la valeur de retour. Alors que le premier est appelable, le second est le résultat de l'appel de la fonction.
En substance, lors de la définition du paramètre "commande" d'un bouton, il est impératif de transmettre l'objet fonction, et non sa valeur de retour, pour éviter une erreur prématurée. exécution. Cette distinction ouvre la voie à une fonctionnalité de rappel transparente lors d'un clic sur un bouton.
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!