Tracing text changes
Tk
variables allow your applications to get notified when an input changes its value. There are four variable classes in Tkinter
: BooleanVar
, DoubleVar
, IntVar
, and StringVar
. Each one wraps the value of the corresponding Python type, which should match the type of the input widget attached to the variable.
This feature is particularly useful if you want to automatically update certain parts of your application based on the current state of some input widgets.
How to do it...
In the following example, we will associate a StringVar
instance to our entry with the textvariable
option; this variable traces write operations with the show_message()
method as callback:
import tkinter as tk class App(tk.Tk): def __init__(self): super().__init__() self.var = tk.StringVar() self.var.trace("w", self.show_message) self.entry = tk.Entry(self, textvariable=self.var) self.btn = tk.Button(self, text="Clear", command=lambda: self.var.set("")) self.label = tk.Label(self) self.entry.pack() self.btn.pack() self.label.pack() def show_message(self, *args): value = self.var.get() text = "Hello, {}!".format(value) if value else "" self.label.config(text=text) if __name__ == "__main__": app = App() app.mainloop()
When you type something into the Entry widget, the label updates its text with a message composed with the Tk
variable value. For instance, if you type the word Phara
, the label will show Hello, Phara!
. If the entry is empty, the label will not show any text. To show you how to modify the variable's content programmatically, we added a button that clears the entry when you click on it:

How it works...
The first lines of our application constructor instantiate StringVar
and attach a callback to the write mode. The valid mode values are as follows:
"w"
: Called when the variable is written"r"
: Called when the variable is read"u"
(for unset): Called when the variable is deleted
When invoked, the callback function receives three arguments: the internal variable name, an empty string (it is used in other types of Tk
variables), and the mode that triggered the operation. By declaring the method with *args
, we make these arguments optional, because we are not using any of these values within the callback.
The get()
method of Tk
wrappers returns the current value of the variable, and the set()
method updates its value. They also notify the corresponding observers, so both modifying the entry's content through the GUI or clicking on the Clear
button will trigger the call to the show_message()
method.
There's more...
Tk variables are optional for Entry
widgets, but they are necessary for other widget classes to work correctly, such as the Checkbutton
and Radiobutton
classes.
See also
- The Creating selections with radio buttons recipe
- The Implementing switches with checkboxes recipe