2010-11-12 2 views
2

Existe-t-il un type d'événement de modification de valeur pour les widgets d'entrée de données tels que Entrée, Texte, Fileur, Bouton de contrôle, Radiobutton? Par changement de valeur, je veux dire la capacité de détecter quand la valeur d'un widget a changé en raison de l'entrée au clavier ou de l'activité couper/supprimer/coller (et modifier/modifier texte). Je ne vois pas un tel événement décrit dans la documentation de l'événement Tkinter [1].Type d'événement de changement de valeur pour les widgets ou utilisation de la technique .trace_variable()?

Est-ce que la bonne technique consiste à lier les variables Tkinter aux valeurs de widget que je veux surveiller et à utiliser les méthodes .trace_variable ('w', ...) de ces variables pour lier les changements de valeur? Cela semble être la bonne approche, mais je n'ai pas vu beaucoup d'utilisation de trace_variable() dans le code source de l'application Tkinter que j'ai étudié ... m'incitant à être prudent dans l'utilisation de cette approche.

[1] http://infohost.nmt.edu/tcc/help/pubs/tkinter/events.html

+0

Je pense que la réponse de Bryan Oakley au post suivant [1] répond à ma question. Citation: "La liaison à keypress n'est pas la bonne solution, elle ne gèrera pas, par exemple, le cas où vous collez avec la souris. se produit dans les bindings de classe qui se déclenchent après les bindings spécifiques au widget.Les textvariables et les traces sont la voie à suivre. " [1] http://stackoverflow.com/questions/2524031/python-tkinter-connect-variable-to-entry-widget – Malcolm

+0

Je crois que le lien suivant confirme le conseil de Bryan: http://effbot.org/tkinterbook/variable. htm. – Malcolm

Répondre

2

Différents widgets appellent des solutions différentes. Par exemple, les boutons de contrôle et les boutons radio ont une option de commande, et avec un widget d'entrée, vous pouvez utiliser les fonctionnalités de validation intégrées.

Pour tous les widgets pouvant être liés à une variable, il est courant de faire une trace variable. Le widget texte est une exception car vous ne pouvez pas l'associer à une variable sans trop d'efforts.

Dans le monde tcl/tk, j'associe tous mes widgets à un seul tableau (nom de tcl pour une carte/dictionnaire de hachage), puis placez une seule trace sur le tableau. Malheureusement tkinter ne supporte pas directement les tableaux tcl. Cependant, le support est assez facile à pirater. Pour plus d'informations voir ma réponse à cette question: How to run a code whenever a Tkinter widget value changes?

+0

Vos 2 exemples - celui que j'ai cité à l'origine et l'exemple avancé du tableau tcl - ont répondu à ma question. Merci beaucoup pour votre aide sur ces forums. – Malcolm

Questions connexes