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.

---
Updated on: 2026-03-25T19:28:48+05:30

8K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements