How to clear the Entry widget after a button is pressed in Tkinter?
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
Dan
Updated on September 23, 2021Comments
-
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 over 14 yearsYou 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 over 14 yearsThe 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 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 over 14 yearsI 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 over 10 yearsNo, this absolutely won't work. This clears the screen, not a widget in a window.
-
Uyghur Lives Matter about 9 yearsThis has nothing to do with the question.
-
Chris Fowl about 5 yearsNote that if you do this, the state of your Entry widget must be normal. Have personally run into this error :).
-
HAL9000 almost 5 years
Python
needs indentations :) -
Ravi K over 4 yearsIf 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 almost 4 yearsthis has nothing to do with the question
-
Alex Liu 33214 almost 4 yearsThis makes no sense at all
-
ghost21blade over 2 yearsNot relevent to the problem
-
NoahVerner over 2 yearsI'm passing by to remind everyone that if you
import tkinter as tk
, then you would have to usetxt_entry.delete(0, tk.END)