How to add placeholder to an Entry in tkinter?

Tkinter provides features to add widgets such as button, text, entry, dialogue and other attributes that help to develop an application. However, tkinter doesn't include a built-in placeholder feature in the entry widget. Placeholders are the dummy text that appears in the entry widget to inform the user about its purpose.

In this article, we will explore different methods to add placeholders to Entry widgets using the insert() method and advanced placeholder behavior.

Basic Placeholder Using insert()

The simplest way to add a placeholder is using the insert() method with index 0 ?

import tkinter as tk

# Create main window
root = tk.Tk()
root.geometry("400x300")
root.title("Basic Placeholder Example")

# Create label
label = tk.Label(root, text="Enter Your Name:", font=('Arial', 12))
label.pack(pady=10)

# Create entry with placeholder
entry = tk.Entry(root, font=('Arial', 12))
entry.pack(pady=10, padx=20, fill='x')

# Insert placeholder text
entry.insert(0, "Enter your name here")
entry.focus()

root.mainloop()

Interactive Placeholder with Event Handling

A better approach is to create a placeholder that disappears when the user clicks and reappears if left empty ?

import tkinter as tk

def on_entry_click(event):
    """Remove placeholder text when entry is clicked"""
    if entry.get() == 'Enter your email address':
        entry.delete(0, tk.END)
        entry.config(fg='black')

def on_focusout(event):
    """Add placeholder text when entry loses focus and is empty"""
    if entry.get() == '':
        entry.insert(0, 'Enter your email address')
        entry.config(fg='grey')

# Create main window
root = tk.Tk()
root.geometry("400x200")
root.title("Interactive Placeholder")

# Create entry widget
entry = tk.Entry(root, font=('Arial', 12), fg='grey')
entry.pack(pady=50, padx=20, fill='x')

# Insert placeholder and bind events
entry.insert(0, 'Enter your email address')
entry.bind('<FocusIn>', on_entry_click)
entry.bind('<FocusOut>', on_focusout)

# Add a button to test functionality
submit_btn = tk.Button(root, text="Submit", command=lambda: print(f"Input: {entry.get()}"))
submit_btn.pack(pady=10)

root.mainloop()

Reusable Placeholder Class

For multiple entries, create a reusable placeholder class ?

import tkinter as tk

class PlaceholderEntry(tk.Entry):
    def __init__(self, master, placeholder="Enter text...", color='grey'):
        super().__init__(master)
        
        self.placeholder = placeholder
        self.placeholder_color = color
        self.default_fg_color = self['fg']
        
        self.bind("<FocusIn>", self.clear_placeholder)
        self.bind("<FocusOut>", self.add_placeholder)
        
        self.add_placeholder()
    
    def clear_placeholder(self, event=None):
        if self.get() == self.placeholder:
            self.delete(0, tk.END)
            self['fg'] = self.default_fg_color
    
    def add_placeholder(self, event=None):
        if not self.get():
            self.insert(0, self.placeholder)
            self['fg'] = self.placeholder_color

# Create main window
root = tk.Tk()
root.geometry("400x300")
root.title("Reusable Placeholder Class")

# Create multiple entries with different placeholders
name_entry = PlaceholderEntry(root, "Enter your name")
name_entry.pack(pady=10, padx=20, fill='x')

email_entry = PlaceholderEntry(root, "Enter your email")
email_entry.pack(pady=10, padx=20, fill='x')

phone_entry = PlaceholderEntry(root, "Enter phone number")
phone_entry.pack(pady=10, padx=20, fill='x')

root.mainloop()

Comparison of Methods

Method Complexity User Experience Best For
Basic insert() Low Poor Quick prototypes
Event Handling Medium Good Single entry forms
Custom Class High Excellent Multiple entries

Conclusion

Use the basic insert() method for simple placeholders, but implement event handling for better user experience. For multiple entries, create a reusable PlaceholderEntry class that automatically manages focus events and text styling.

Updated on: 2026-03-25T16:50:31+05:30

5K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements