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
Libérer: 2024-12-23 11:01:33
original
345 Les gens l'ont consulté

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

Ce code est équivalent à :

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

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

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

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