Irrespective of number of Entry boxes we used in our application, we can remove all user entered data by using winfo_children() which returns all the widget classes of the Tkinter window.
Here is the code
for widget in my_w.winfo_children():
if isinstance(widget, tk.Entry): # If this is an Entry widget
widget.delete(0,'end') # Delete all entries
Using the above methods we will create one application where on Click of a button the data entered by the user in Entry box is displayed and default text is changed to Welcome.
def my_upd():
my_str.set(e1.get()) # read and assign text to StringVar()
e1_str.set('Welcome')# Update the Entry box text
Here on Click of the button the function my_upd() is executed. Inside this function we will first read the text entered by user and assign the same to another Label ( l2 ) .
In next line we will assign the string 'Welcome' to the StringVar() binded to Entry box ( e1 ).
import tkinter as tk
my_w = tk.Tk()
my_w.geometry("250x150")
my_w.title("plus2net.com") # Adding a title
l1 = tk.Label(my_w, text='Your Name', width=10 ) # added one Label
l1.grid(row=1,column=1)
e1_str=tk.StringVar()
e1 = tk.Entry(my_w,textvariable=e1_str,width=15) # added one Entry box
e1.grid(row=1,column=2)
b1 = tk.Button(my_w, text='Update', width=8,bg='yellow',
command=lambda: my_upd())
b1.grid(row=1,column=3)
my_str = tk.StringVar()
# added one Label
l2 = tk.Label(my_w, text='Output',textvariable=my_str, width=10 )
l2.grid(row=2,column=1)
def my_upd():
my_str.set(e1.get()) # read and assign text to StringVar()
e1_str.set('Welcome')# Update the Entry box text
my_w.mainloop()
We can change or manage different attributes by using config. One example is here .
e1.config(bg='red') # change background color to red
Similarly other properties can be updated. One similar list is available with Text entry.
We can use the attribute validate to trigger validation of user input. This will take values focus, focusin,focusout,kye,all,none. How to Validate user entered data→
In practice we will frequently come across requirement of Entry text box. Most common requirements are listed here.
How to read the entered text.
How to delete the entered text.
How to configure the font colour and background colour of the text entry box.
Copy data from first entry box to second entry on button click or using trace method in Tkinter
We will create two Entry boxes. The first entry box e1 we will use to enter the data. On click of the Update button data from first entry box e1 will transfer to second entry box e2. One more button we will use to delete all data from second entry box e2.
By using two buttons we can change the font colour of second entry box e2 to green or red. Similarly by using two more buttons we can change the background colour of second entry box e2.
import tkinter as tk
my_w = tk.Tk()
from tkinter import *
my_w.geometry("250x150")
my_w.title("plus2net.com") # Adding a title
l1 = tk.Label(my_w, text='First' ) # added one Label
l1.grid(row=1,column=1)
e1_str=tk.StringVar()
e1 = tk.Entry(my_w,textvariable=e1_str) # added one Entry box
e1.grid(row=1,column=2)
l2 = tk.Label(my_w, text='Second' ) # added one Label
l2.grid(row=2,column=1)
e2_str=tk.StringVar()
e2 = tk.Entry(my_w,textvariable=e2_str) # added one Entry box
e2.grid(row=2,column=2)
b1 = tk.Button(my_w, text='Update', width=8,
command=lambda: my_upd())
b1.grid(row=3,column=1)
b2 = tk.Button(my_w, text='Reset', width=8,
command=lambda: my_reset())
b2.grid(row=3,column=2)
## buttons for changing font colour of Entries
b3 = tk.Button(my_w, text='fg=green', width=8,
command=lambda: my_config('fg','green'))
b3.grid(row=4,column=1)
b4 = tk.Button(my_w, text='fg=red', width=8,
command=lambda: my_config('fg','red'))
b4.grid(row=4,column=2)
b5 = tk.Button(my_w, text='bg=yellow', width=8,
command=lambda: my_config('bg','yellow'))
b5.grid(row=5,column=1)
b6 = tk.Button(my_w, text='bg=blue', width=8,
command=lambda: my_config('bg','blue'))
b6.grid(row=5,column=2)
def my_upd():
e2_str.set(e1.get()) # read and assign text to StringVar()
def my_reset():
e1.delete(0,END) # Delete first Entry
e2.delete(0,END) # Delete Second Entry
e1.config(bg='#ffffff',fg='#000000') # reset background
e2.config(bg='#ffffff',fg='#000000') # reset background
def my_config(type,col):
if type=='fg':
e1.config(fg=col)
e2.config(fg=col)
elif type=='bg':
e1.config(bg=col)
e2.config(bg=col)
my_w.mainloop()
Key Release event to count number of chars entered in a Tkinter Entry box #entry #tkinter #keyEvent
By using Key Release event we can count the number of chars entered by the user in an Entry box. Here we have used len to get the number of chars inside the Entry box. To display the number in a Label using StringVar(), we have converted the number to string by using str().
import tkinter as tk
my_w = tk.Tk()
my_w.geometry("350x150")
my_w.title("plus2net.com") # Adding a title
l1 = tk.Label(my_w,text='Your Name',width=10,font=20)
l1.grid(row=1,column=1,padx=5,pady=10)
e1 = tk.Entry(my_w,bg='yellow',font=28)
e1.grid(row=1,column=2)
str1=tk.StringVar(value=0) # StringVar for l2
l2=tk.Label(my_w,text=0,
bg='lightgreen',textvariable=str1,width=2,font=28)
l2.grid(row=1,column=3)
e1.bind("<KeyRelease>",
lambda x : str1.set(str(len(e1.get()))))
my_w.mainloop()
Here are some commonly used Events with the Entry widget.
<FocusIn> : When we click the Entry widget or it is in focus and mouse is inside it. <FocusOut> : When focus is moved out of the Entry widget. Tab key is pressed or Mouse clicked outside. <KeyRelease> : When any key is relesed. <KeyPress> : When any key is pressed.
Difference between KeyPress and KeyRelease event 🔝
Replace the last line in above code with KeyRelease event and check the difference.
e1.bind('<KeyPress>',my_upd)
On KeyPress the event is triggered first before the char enteres the first entry box ( e1 ). So while copying the data from first entry ( e1) to second entry box (e2 ) the last char ( most recent key used ) is not copied.
Display data from Database table in Entry widget 🔝
from sqlalchemy import create_engine
# Connect to database using your user id and password
my_conn = create_engine("mysql+mysqldb://userid:password@localhost/database_name")
r_set = my_conn.execute("SELECT name FROM student WHERE id=6") # execute query
my_result = r_set.fetchone() # get the data
print(my_result[0]) # print to console
# Create Tkitner window and show the value
import tkinter as tk
my_w = tk.Tk()
my_w.geometry("250x150")
my_w.title("plus2net.com") # Adding a title
l1 = tk.Label(my_w, text="Your Name", width=10) # added one Label
l1.grid(row=1, column=1)
e1_str = tk.StringVar(value=my_result[0]) # default value taken from database
e1 = tk.Entry(my_w, width=20, bg="yellow", textvariable=e1_str) # added one Entry box
e1.grid(row=1, column=2)
my_w.mainloop()