¿Cómo agregar un marcador de posición a una entrada en tkinter?

He creado una ventana de inicio de sesión en tkinter que tiene dos campos de entrada, el primero es el nombre de usuario y el segundo es la contraseña.
código

from tkinter import * ui = Tk() e1 = Entry(ui) #i need a placeholder "Username" in the above entry field e1.pack() ui.mainloop() 

Quiero un marcador de posición llamado “Nombre de usuario” en la Entry , pero si hace clic dentro, el texto debería desaparecer.

Debe establecer un valor predeterminado para esta entrada. Me gusta esto:

 from tkinter import * ui = Tk() e1 = Entry(ui) e1.insert(0, 'username') e1.pack() ui.mainloop() 

Luego, si desea eliminar el contenido al hacer clic en la entrada, debe vincular un evento de clic del mouse con un método de controlador de eventos para actualizar el contenido de esta entrada. Aquí hay un enlace para usted.

Puede crear una clase que hereda de la Entry como a continuación:

 import tkinter as tk class EntryWithPlaceholder(tk.Entry): def __init__(self, master=None, placeholder="PLACEHOLDER", color='grey'): super().__init__(master) self.placeholder = placeholder self.placeholder_color = color self.default_fg_color = self['fg'] self.bind("", self.foc_in) self.bind("", self.foc_out) self.put_placeholder() def put_placeholder(self): self.insert(0, self.placeholder) self['fg'] = self.placeholder_color def foc_in(self, *args): if self['fg'] == self.placeholder_color: self.delete('0', 'end') self['fg'] = self.default_fg_color def foc_out(self, *args): if not self.get(): self.put_placeholder() if __name__ == "__main__": root = tk.Tk() username = EntryWithPlaceholder(root, "username") password = EntryWithPlaceholder(root, "password", 'blue') username.pack() password.pack() root.mainloop() 
 from tkinter import * root=Tk() root.geometry("300x200+600+250") root.config(background="#E0FFFF") root.resizable(False,False) def userText(event): e1.delete(0,END) usercheck=True def passText(event): e2.delete(0, END) passcheck=True a=StringVar() b=StringVar() usercheck=False passcheck=False Label(root,text="User name",bg="#E0FFFF").place(x=20,y=50) e1= Entry(root,textvariable=a) e1.place(x=100,y=50) e1.insert(0,"Enter username") e1.bind("