Maison >développement back-end >Tutoriel Python >Pourquoi la commande de mon bouton Tkinter s'exécute-t-elle immédiatement au lieu d'un clic ?

Pourquoi la commande de mon bouton Tkinter s'exécute-t-elle immédiatement au lieu d'un clic ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-23 11:01:33420parcourir

Why is my Tkinter button's command executing immediately instead of on click?

Déclenchement inattendu de boutons dans Tkinter : comprendre les références de fonctions

Dans Tkinter, lors de la création d'un bouton, vous pouvez spécifier une commande qui sera exécutée lorsque le bouton est cliqué. Cependant, dans votre exemple de code, la commande fournie est exécutée immédiatement lorsque le bouton est créé.

Pour comprendre pourquoi cela se produit, considérez l'extrait suivant :

b = Button(admin, text='as', command=button('hey'))

Ce code est équivalent à :

result = button('hey')
b = Button(admin, text='as', command=result)

Lorsque vous appelez bouton('hey') à l'intérieur du paramètre de commande, vous appelez la fonction et l'exécutez immédiatement. En conséquence, le code print('hey') et print('het') sont imprimés avant que le bouton ne soit réellement cliqué.

Pour résoudre ce problème, vous devez passer une référence à la fonction, sans l'exécuter. Pour ce faire, omettez simplement les parenthèses :

b = Button(admin, text='as', command=button)

Cela transmettra une référence à la fonction du bouton, et elle sera exécutée lorsque le bouton sera cliqué, pas lors de sa création.

Alternativement, vous pouvez utiliser les fonctions lambda pour créer une fonction anonyme qui appelle la fonction d'origine avec l'argument souhaité :

b = Button(admin, text='as', command=lambda: button('hey'))

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