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()
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()
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?
ent.delete(0, END)
is the correct answer, assuming that ent
is a proper reference to the entry widget. If you get the error you say you do, you have an error in your code. You will need to show us the code if you are unable to spot the error yourself.
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))
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
First of all, make sure the Text is enabled, then delete your tags, and then the content.
myText.config(state=NORMAL)
myText.tag_delete ("myTags")
myText.delete(1.0, END)
When the Text is "DISABLE", the delete does not work because the Text field is in read-only mode.
def clear():
global input
abc =
input.set(abc)
root = Tk()
input = StringVar()
ent = Entry(root,textvariable = input,font=('ariel',23,'bold'),bg='powder blue',bd=30,justify='right').grid(columnspan=4,ipady=20)
Clear = Button(root,text="Clear",command=clear).pack()
Input is set the textvariable in the entry, which is the string variable and when I set the text of the string variable as "" this clears the text in the entry
Simply define a function and set the value of your Combobox to empty/null or whatever you want. Try the following.
def Reset():
cmb.set("")
here, cmb
is a variable in which you have assigned the Combobox. Now call that function in a button such as,
btn2 = ttk.Button(root, text="Reset",command=Reset)
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)
if you add the print code to check the type of real, you will see that real is a string, not an Entry so there is no delete attribute.
def res(real, secret):
print(type(real))
if secret==eval(real):
showinfo(message='that is right!')
real.delete(0, END)
>> output: <class 'str'>
secret = randrange(1,100)
print(secret)
def res(real, secret):
if secret==eval(real):
showinfo(message='that is right!')
ent.delete(0, END) # we call the entry an delete its content
def guess():
ge = Tk()
ge.title('guessing game')
Label(ge, text="what is your guess:").pack(side=TOP)
global ent # Globalize ent to use it in other function
ent = Entry(ge)
ent.pack(side=TOP)
btn=Button(ge, text="Enter", command=lambda: res(ent.get(),secret))
btn.pack(side=LEFT)
ge.mainloop()
It should work.
if none of the above is working you can use this->
idAssignedToEntryWidget.delete(first = 0, last = UpperLimitAssignedToEntryWidget)
for eg ->
id assigned is = en then
en.delete(first =0, last =100)
Try with this:
import os
os.system('clear')
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.