How to clear the Entry widget after a button is pressed in Tkinter?

230,402

Solution 1

After poking around a bit through the Introduction to Tkinter, I came up with the code below, which doesn't do anything except display a text field and clear it when the "Clear text" button is pushed:

import tkinter as tk

class App(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master, height=42, width=42)
        self.entry = tk.Entry(self)
        self.entry.focus()
        self.entry.pack()
        self.clear_button = tk.Button(self, text="Clear text", command=self.clear_text)
        self.clear_button.pack()

    def clear_text(self):
        self.entry.delete(0, 'end')

def main():
    root = tk.Tk()
    App(root).pack(expand=True, fill='both')
    root.mainloop()

if __name__ == "__main__":
    main()

Solution 2

I'm unclear about your question. From http://effbot.org/tkinterbook/entry.htm#patterns, it seems you just need to do an assignment after you called the delete. To add entry text to the widget, use the insert method. To replace the current text, you can call delete before you insert the new text.

e = Entry(master)
e.pack()

e.delete(0, END)
e.insert(0, "")

Could you post a bit more code?

Solution 3

real gets the value ent.get() which is just a string. It has no idea where it came from, and no way to affect the widget.

Instead of real.delete(), call .delete() on the entry widget itself:

def res(ent, real, secret):
    if secret == eval(real):
        showinfo(message='that is right!')
    ent.delete(0, END)

def guess():
    ...
    btn = Button(ge, text="Enter", command=lambda: res(ent, ent.get(), secret))

Solution 4

If in case you are using Python 3.x, you have to use

txt_entry = Entry(root)

txt_entry.pack()

txt_entry.delete(0, tkinter.END)

Solution 5

You shall proceed with ent.delete(0,"end") instead of using 'END', use 'end' inside quotation.

 secret = randrange(1,100)
print(secret)
def res(real, secret):
    if secret==eval(real):
        showinfo(message='that is right!')
    real.delete(0, END)

def guess():
    ge = Tk()
    ge.title('guessing game')

    Label(ge, text="what is your guess:").pack(side=TOP)

    ent = Entry(ge)
    ent.pack(side=TOP)

    btn=Button(ge, text="Enter", command=lambda: res(ent.get(),secret))
    btn.pack(side=LEFT)

    ge.mainloop()

This shall solve your problem

Share:
230,402
Dan
Author by

Dan

Updated on September 23, 2021

Comments

  • Dan
    Dan over 2 years

    I'm trying to clear the Entry widget after the user presses a button using Tkinter.

    I tried using ent.delete(0, END), but I got an error saying that strings don't have the attribute delete.

    Here is my code, where I'm getting error on real.delete(0, END):

    secret = randrange(1,100)
    print(secret)
    def res(real, secret):
        if secret==eval(real):
            showinfo(message='that is right!')
        real.delete(0, END)
    
    def guess():
        ge = Tk()
        ge.title('guessing game')
    
        Label(ge, text="what is your guess:").pack(side=TOP)
    
        ent = Entry(ge)
        ent.pack(side=TOP)
    
        btn=Button(ge, text="Enter", command=lambda: res(ent.get(),secret))
        btn.pack(side=LEFT)
    
        ge.mainloop()
    
  • Russell Smith
    Russell Smith over 14 years
    You can supply the argument END (or "end") instead of computing the length of the data. Since you say it didn't work but don't define "didn't work" (ie: did you get an error, or did it silently fail?), my guess is you used an unqualified "END". Try "Tkinter.END" instead. When I use that in the above code it works just fine.
  • Russell Smith
    Russell Smith over 14 years
    The answer "it seems you just need to do an assignment after you called the delete" in no way answers the question "how to clear the entry widget".
  • GreenMatt
    GreenMatt over 14 years
    @Bryan: Ah, I just used END, not Tkinter.END (the tutorial used from ... import instead of just import). Thanks! The fix is in the code.
  • Dan
    Dan over 14 years
    I want the button to perform 2 actions at the same time. the first is to perform a random action and the 2nd is to clear the entry
  • Russell Smith
    Russell Smith over 10 years
    No, this absolutely won't work. This clears the screen, not a widget in a window.
  • Uyghur Lives Matter
    Uyghur Lives Matter about 9 years
    This has nothing to do with the question.
  • Chris Fowl
    Chris Fowl about 5 years
    Note that if you do this, the state of your Entry widget must be normal. Have personally run into this error :).
  • HAL9000
    HAL9000 almost 5 years
    Python needs indentations :)
  • Ravi K
    Ravi K over 4 years
    If you are using Python 3.x version, you have to more careful about to clear the entry box - e.delete(0, tkinter.END)
  • Alex Liu 33214
    Alex Liu 33214 almost 4 years
    this has nothing to do with the question
  • Alex Liu 33214
    Alex Liu 33214 almost 4 years
    This makes no sense at all
  • ghost21blade
    ghost21blade over 2 years
    Not relevent to the problem
  • NoahVerner
    NoahVerner over 2 years
    I'm passing by to remind everyone that if you import tkinter as tk, then you would have to use txt_entry.delete(0, tk.END)