Maison > développement back-end > Tutoriel Python > Pourquoi mon bouton Tkinter exécute-t-il sa commande à la création plutôt qu'au clic ?

Pourquoi mon bouton Tkinter exécute-t-il sa commande à la création plutôt qu'au clic ?

DDD
Libérer: 2024-12-23 09:46:10
original
112 Les gens l'ont consulté

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

Exécution de la commande Button lors de la création

Dans Tkinter, lorsqu'une instance Button est initialisée avec un paramètre de commande, la fonction associée est destinée à être exécuté lorsque le bouton est cliqué. Cependant, dans certains cas, la commande peut être exécutée immédiatement après la création du bouton, contrairement au comportement attendu.

Analyse de l'exemple de code

Considérez le code suivant :

from Tkinter import *

admin = Tk()
def button(an):
    print(an)
    print('het')

b = Button(admin, text='as', command=button('hey'))
b.pack()
mainloop()
Copier après la connexion

Description du problème

Lorsque vous exécutez ce code, le bouton ne semble pas fonctionner correctement. Au lieu d'exécuter la fonction du bouton après avoir cliqué, il affiche « hey » et « het » immédiatement après la création.

Explication

Le problème réside dans la façon dont la commande Le paramètre est en cours d’initialisation. La ligne :

command=button('hey')
Copier après la connexion

transmet le résultat de l'appel de la fonction bouton('hey') au paramètre de commande. Cela équivaut à :

result = button('hey')
command=result
Copier après la connexion

Puisque la fonction bouton('hey') est exécutée immédiatement et renvoie le résultat, la commande est définie sur le résultat au lieu de la référence de fonction elle-même. Par conséquent, la fonction est exécutée immédiatement, plutôt que lorsque le bouton est cliqué.

Solution

Pour résoudre ce problème, vous devez transmettre une référence au bouton fonction sans l’exécuter. Pour ce faire, omettez simplement les parenthèses lors de l'initialisation du paramètre de commande :

command=button
Copier après la connexion

Notes supplémentaires

  • Il est important de comprendre la différence entre passer une fonction référencer et exécuter une fonction.
  • Envisagez d'utiliser des fonctions lambda ou functools.partial pour fournir des paramètres à fonctions de rappel si nécessaire.
  • Référez-vous au tutoriel zone.effbot.org sur les rappels Tkinter pour des informations plus détaillées.

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.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal