How to connect a variable to Entry widget?
I think you want something like this. In the example below, I created a variable myvar
and assigned it to be textvariable
of both a Label
and Entry
widgets. This way both are coupled and changes in the Entry widget will reflect automatically in Label.
You can also set trace on variables, e.g. to write to 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()
Comments
-
Sano98 almost 2 years
I'm trying to associate a variable with a Tkinter entry widget, in a way that:
Whenever I change the value (the "content") of the entry, mainly by typing something into it, the variable automatically gets assigned the value of what I've typed. Without me having to push a button "Update value " or something like that first.
Whenever the variable gets changed (by some other part of the programm), I want the entry value displayed to be adjusted automatically. I believe that this could work via the textvariable.
I read the example on http://effbot.org/tkinterbook/entry.htm, but it is not exactly helping me for what I have in mind. I have a feeling that there is a way of ensuring the first condition with using entry's "validate". Any ideas?
-
Sano98 about 14 yearsThank you, this goes in the right direction, but to work with the variables, I need to convert them to normal python variables. Your example works because the widgets share the same textvariable. But what would you do, for example, if you wanted to print the content of your entry to the standard output whenever it gets changed instead of writing it in a tkinter label?
-
carboleda about 14 yearsYou do this:
text_entry.bind('<Key>', handler)
wherehandler
is a function that assigns your python variable. See my answer. -
Nandhini about 14 years@Sano98, i have edited answer, you can easily trace variables for read/write
-
Sano98 about 14 yearsThanks, I used your proposal after I encountered the problems described by Brian Oakley when trying it with binding to keyppress as bpowah suggested. After a little study, I now see that tracing seems taylormade for a problem like this. But when using IntVar instead of StringVar, a ValueError occurs when deleting completely the content of the entry - the empty literal "" is not valid for int conversion. It is given the value 0, which is what I expected, but is there a way to avoid the error? Or to catch it somehow?
-
Nandhini about 14 years@Sano98, you may either change the global getint defined in tkinter or may better derive a class from IntVar to overide get, or may be there are better ways, you may ask another question
-
Fake Name almost 6 yearsPlease, please, please please never use
from <xxx> import *
in examples.