Search code examples
pythontkintertracetk-toolkit

How can I set entry field in Tkinter that works with .trace to autocomplete but with all letters converted in lower case


I have some entry fields in tkinter that a user can fill with firstname and lastname but I need to autocomplete from them some other entries. The problem is that some entries that auto complete I don't want to have capital letters. So I want all the letters in the auto-complete entries username and email that are working from .trace to be lower case. Can this be done?

Code:

firstname = StringVar()
lastname = StringVar()
Username = StringVar()
email = StringVar()
display = StringVar()


first_name_entry = Entry(textvariable=firstname,width="30")
last_name_entry = Entry(textvariable=lastname,width="30")
Username_entry = Entry(textvariable=Username,width="30")
email_entry = Entry(textvariable=email,width="50")
display_entry = Entry(textvariable=display,width="30")


first_name_entry.place(x=300,y=100)
last_name_entry.place(x=300,y=180)
Username_entry.place(x=300,y=260)
email_entry.place(x=300,y=330)
display_entry.place(x=15,y=330)

def suggest(*args):
    Username_entry.delete(0,'end')
    Username_entry.insert(0,firstname.get()+'.'+lastname.get())
    email_entry.delete(0,'end')
    email_entry.insert(0,lastname.get()+'@example.com')
    display_entry.delete(0,'end')
    display_entry.insert(0,firstname.get()+' '+lastname.get())

firstname.trace('w',suggest)
lastname.trace('w',suggest)

Solution

  • You simply just have to use the lower() method after get(). So something like:

    Username_entry.insert(0,firstname.get().lower()+'.'+lastname.get().lower())
    .... # rest of codes
    email_entry.insert(0,lastname.get().lower()+'@example.com')
    

    The lower() is a string method that converts your string into lower case. You can also use upper() to convert your string to upper case and so on.