16.1.6.4 Coupling Widget Variables
The current-value setting of some widgets (like text entry widgets)
can be connected directly to application variables by using special
options. These options are variable
, textvariable
,
onvalue
, offvalue
, and value
. This
connection works both ways: if the variable changes for any reason,
the widget it's connected to will be updated to reflect the new value.
Unfortunately, in the current implementation of Tkinter it is
not possible to hand over an arbitrary Python variable to a widget
through a variable
or textvariable
option. The only
kinds of variables for which this works are variables that are
subclassed from a class called Variable, defined in the
Tkinter module.
There are many useful subclasses of Variable already defined: StringVar, IntVar, DoubleVar, and BooleanVar. To read the current value of such a variable, call the get() method on it, and to change its value you call the set() method. If you follow this protocol, the widget will always track the value of the variable, with no further intervention on your part.
For example:
class App(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.pack() self.entrythingy = Entry() self.entrythingy.pack() self.button.pack() # here is the application variable self.contents = StringVar() # set it to some value self.contents.set("this is a variable") # tell the entry widget to watch this variable self.entrythingy["textvariable"] = self.contents # and here we get a callback when the user hits return. # we will have the program print out the value of the # application variable when the user hits return self.entrythingy.bind('<Key-Return>', self.print_contents) def print_contents(self, event): print "hi. contents of entry is now ---->", \ self.contents.get()
See About this document... for information on suggesting changes.