Pourquoi le paramètre \'Command\' dans les boutons Tkinter s'exécute-t-il lors de la déclaration ?

Barbara Streisand
Libérer: 2024-10-19 07:57:30
original
496 Les gens l'ont consulté

Why Does the

Exécution du paramètre "Command" du bouton lors de la déclaration : résolue

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!