Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
How do I get an event callback when a Tkinter Entry widget is modified?
Callback functions in Tkinter are used to handle specific events in widgets. You can add an event callback function to an Entry widget that triggers whenever the widget's content is modified. This is accomplished by creating a Tkinter variable (like StringVar) and using its trace() method to monitor changes.
Basic Entry Widget Callback
Here's how to create a callback that responds to Entry widget modifications ?
import tkinter as tk
def callback(var):
content = var.get()
print(f"Entry modified: {content}")
# Create main window
win = tk.Tk()
win.geometry("400x200")
win.title("Entry Callback Example")
# Create StringVar to store user input
var = tk.StringVar()
# Trace the variable - 'w' means write mode (when value changes)
var.trace("w", lambda name, index, mode, var=var: callback(var))
# Create Entry widget linked to the variable
entry = tk.Entry(win, textvariable=var, width=30)
entry.pack(pady=20)
win.mainloop()
Real-time Label Update Example
This example shows the Entry content updating a Label widget in real-time ?
import tkinter as tk
def update_label(var):
content = var.get()
label.config(text=f"You typed: {content}")
# Create main window
win = tk.Tk()
win.geometry("500x150")
win.title("Live Entry Monitor")
# Create StringVar for the Entry widget
var = tk.StringVar()
var.trace("w", lambda name, index, mode, var=var: update_label(var))
# Create widgets
entry = tk.Entry(win, textvariable=var, font=("Arial", 12))
entry.pack(pady=10)
label = tk.Label(win, text="Type something above...", font=("Arial", 10))
label.pack(pady=5)
win.mainloop()
Trace Modes
The trace() method supports different modes for monitoring variable changes ?
| Mode | Description | When Triggered |
|---|---|---|
"w" |
Write | Variable value is modified |
"r" |
Read | Variable value is read |
"u" |
Unset | Variable is deleted |
Multiple Callback Example
You can attach multiple callbacks to monitor different aspects ?
import tkinter as tk
def character_count(var):
count = len(var.get())
count_label.config(text=f"Characters: {count}")
def word_count(var):
words = len(var.get().split())
word_label.config(text=f"Words: {words}")
# Create main window
win = tk.Tk()
win.geometry("400x200")
# Create StringVar
text_var = tk.StringVar()
# Add multiple traces
text_var.trace("w", lambda n, i, m, v=text_var: character_count(v))
text_var.trace("w", lambda n, i, m, v=text_var: word_count(v))
# Create widgets
entry = tk.Entry(win, textvariable=text_var, width=40)
entry.pack(pady=10)
count_label = tk.Label(win, text="Characters: 0")
count_label.pack(pady=5)
word_label = tk.Label(win, text="Words: 0")
word_label.pack(pady=5)
win.mainloop()
Conclusion
Use StringVar.trace("w", callback) to monitor Entry widget modifications in real-time. The "w" mode triggers the callback whenever the Entry content changes, enabling dynamic updates to other widgets or validation logic.
