2010-03-26 3 views
8

Je suis en train d'associer une variable avec un widget d'entrée Tkinter, d'une manière qui:Comment connecter une variable au widget Entrée?

  1. Chaque fois que je change la valeur (le « contenu ») de l'entrée, principalement en tapant quelque chose en elle, la variable reçoit automatiquement la valeur de ce que j'ai tapé. Sans que je doive appuyer sur un bouton "Mettre à jour la valeur" ou quelque chose comme ça en premier.

  2. Chaque fois que la variable est modifiée (par une autre partie du programme), je veux que la valeur d'entrée affichée soit ajustée automatiquement. Je crois que cela pourrait fonctionner via la variable texte.

Je lis l'exemple sur http://effbot.org/tkinterbook/entry.htm, mais il est pas exactement ce que me aide pour que j'ai à l'esprit. J'ai le sentiment qu'il existe un moyen d'assurer la première condition en utilisant "valider" de l'entrée. Des idées?

+2

Peut-être pourriez-vous suggérer une alternative? :) –

+4

Quel est le problème avec tkinter? Selon la page d'accueil de python, c'est "... le paquet GUI standard de Python." Et le "plus communément utilisé." – Sano98

+0

Variables de contrôle: http://infohost.nmt.edu/tcc/help/pubs/tkinter/control-variables.html –

Répondre

12

Je pense que vous voulez quelque chose comme ça. Dans l'exemple ci-dessous, j'ai créé une variable myvar et l'ai affectée à textvariable des widgets Label et Entry. De cette façon, les deux sont couplés et les modifications dans le widget Entrée refléteront automatiquement dans Label.

Vous pouvez également set trace sur des variables, par ex. écrire à stdout.

from tkinter import * 


root = Tk() 
root.title("MyApp") 

myvar = StringVar() 

def mywarWritten(*args): 
    print "mywarWritten",myvar.get() 

myvar.trace("w", mywarWritten) 

label = Label(root, textvariable=myvar) 
label.pack() 

text_entry = Entry(root, textvariable=myvar) 
text_entry.pack() 

root.mainloop() 
+0

Merci, cela va dans la bonne direction, mais pour travailler avec les variables, j'ai besoin de les convertir en variables python normales. Votre exemple fonctionne parce que les widgets partagent la même variable texte. Mais que feriez-vous, par exemple, si vous vouliez imprimer le contenu de votre entrée dans la sortie standard chaque fois qu'elle est modifiée au lieu de l'écrire dans une étiquette tkinter? – Sano98

+1

Vous faites ceci: 'text_entry.bind ('', handler)' où 'handler' est une fonction qui assigne votre variable python. Vois ma réponse. – Paul

+0

@ Sano98, j'ai édité la réponse, vous pouvez facilement tracer des variables pour lire/écrire –

Questions connexes