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
DDDoriginal
2024-12-23 09:46:10266parcourir

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()

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')

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

result = button('hey')
command=result

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

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!

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