Maison  >  Article  >  développement back-end  >  Pourquoi le bouton « Commande » s'exécute-t-il immédiatement lorsqu'il est déclaré ?

Pourquoi le bouton « Commande » s'exécute-t-il immédiatement lorsqu'il est déclaré ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-19 07:59:01384parcourir

Why Does the Button

Pourquoi le paramètre Button "command" est-il exécuté lorsqu'il est déclaré ?

En Python, le paramètre "command" du widget Button est responsable de définir une fonction de rappel. Cependant, les utilisateurs peuvent être perplexes lorsque cette fonction de rappel semble être exécutée immédiatement après la déclaration du bouton.

Ce problème survient lorsque le paramètre "command" se voit attribuer une expression d'appel de fonction au lieu d'un objet de fonction. Par exemple :

<code class="python">def Hello():
    print("Hi there!")

Button(frame, text="Hello", command=Hello())  # Function call expression</code>

Dans ce code, l'expression "Hello()" appelle immédiatement la fonction Hello, renvoyant sa valeur de retour. En conséquence, la fonction de rappel est exécutée avant la création du bouton, ce qui entraîne le message « Salut ! » message en cours d'impression sur la console.

Pour éviter ce problème et attribuer l'objet fonction au paramètre "commande", utilisez le nom de la fonction sans parenthèses :

<code class="python">Button(frame, text="Hello", command=Hello)  # Function object</code>

Les objets fonction contiennent des références à leur code, qui sera exécuté lorsque le rappel sera invoqué. De plus, si des arguments doivent être transmis, des expressions lambda peuvent être utilisées :

<code class="python">Button(frame, text="Hello", command=lambda: Goodnight("Moon"))</code>

Dans ce cas, l'expression lambda encapsule l'appel Goodnight("Moon"), retardant son exécution jusqu'à ce que le bouton soit cliqué.

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