Python: Comment obtenir un texte d'entrée mis à jour à utiliser dans une commande binded à elle?

StackOverflow https://stackoverflow.com/questions/4287553

  •  28-09-2019
  •  | 
  •  

Question

Considérez le code suivant:

text = Entry(); text.pack()
def show(e):
    print text.get()
text.bind('<Key>', show)

Le mot Let je mets les lettres ABC dans l'entrée, un par un. La sortie serait:

>>> 
>>> A
>>> AB

Notez que lorsque vous appuyez sur A, il imprime une chaîne vide. Quand je presse B, il imprime A, pas AB. Si je ne rien de presse après C, il ne sera jamais montré. Il semble que le contenu d'entrée est mis à jour uniquement après la commande binded est de retour, donc je ne peux pas utiliser la valeur d'entrée réelle dans cette fonction.

Y at-il moyen d'obtenir une valeur d'entrée mis à jour pour utiliser à l'intérieur d'une commande binded?

Était-ce utile?

La solution

Vous pourriez remplacer l'événement <Key> avec l'événement <KeyRelease>. Cela devrait fonctionner.

Voici une liste des événements: http: / /infohost.nmt.edu/tcc/help/pubs/tkinter/events.html#event-types

Autres conseils

La raison doit faire avec Tk « bindtags ». Les liaisons sont associées avec des étiquettes, et les liaisons sont traitées dans l'ordre d'étiquette. Les deux noms et classes widget widget sont des balises, et ils sont traités dans cet ordre (liaisons spécifiques-widget d'abord, les liaisons de seconde classe).

Pour cette raison, chaque fois que vous appuyez sur une touche de liaison spécifique de votre widget feu avant la classe de liaison a une chance de modifier le widget.

Il y a beaucoup de solutions de contournement. Le plus simple est de se lier à <KeyRelease> puisque les liaisons de classe se produisent sur la touche. Il existe d'autres solutions qui impliquent soit en ajoutant ou en réorganisant les balises lient, ou à l'aide de la fonctions intégrées de validation des données du widget d'entrée. Ce qui est le mieux dépend de ce que vous êtes vraiment essayer d'accomplir.

Pour plus d'informations sur les fonctions de validation des données, voir cette question: interactivement validation contenu widget Entrée en tkinter

Pour une réponse plus complète, voir Tkinter: set LaChaine après événement, y compris la touche pressée

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top