Как очистить виджет ввода после нажатия кнопки в Tkinter?
Я пытаюсь очистить виджет Entry
после нажатия пользователем кнопки с помощью Tkinter.
Я попытался использовать ent.delete(0, END)
, но получил ошибку, говоря, что строки не имеют атрибута delete.
Вот мой код, где я получаю ошибку на 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()
Ответы
Ответ 1
После того, как мы немного пробрались через Введение в Tkinter, я придумал приведенный ниже код, который ничего не делает, кроме отображения текстовое поле и очистите его, когда нажата кнопка "Clear text"
:
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()
Ответ 2
ent.delete(0, END)
- правильный ответ, предполагая, что ent
является правильной ссылкой на виджет ввода. Если вы получите сообщение об ошибке, которое вы говорите, у вас есть ошибка в коде. Вам нужно будет показать нам код, если вы не можете определить ошибку самостоятельно.
Ответ 3
real
получает значение ent.get()
, которое является просто строкой. Он понятия не имеет, откуда он появился, и никак не повлиять на виджетов.
Вместо real.delete()
вызовите .delete()
в виджетах входа:
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))
Ответ 4
Я не понимаю ваш вопрос. Из http://effbot.org/tkinterbook/entry.htm#patterns, это
кажется, вам просто нужно выполнить задание после того, как вы вызвали удаление.
Чтобы добавить текст ввода в виджет, используйте метод вставки. Чтобы заменить текущий текст, вы можете вызвать delete, прежде чем вставлять новый текст.
e = Entry(master)
e.pack()
e.delete(0, END)
e.insert(0, "")
Не могли бы вы разместить немного больше кода?
Ответ 5
Прежде всего, убедитесь, что текст включен, затем удалите теги и затем содержимое.
myText.config(state=NORMAL)
myText.tag_delete ("myTags")
myText.delete(1.0, END)
Когда текст "ОТКЛЮЧЕН", удаление не работает, потому что текстовое поле находится в режиме только для чтения.
Ответ 6
Вы должны использовать ent.delete(0,"end")
вместо использования "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()
Это решит вашу проблему
Ответ 7
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()
На вход устанавливается текстовая переменная в записи, которая является строковой переменной, и когда я устанавливаю текст строковой переменной как "", это очищает текст в записи
Ответ 8
если ничего из вышеперечисленного не работает, вы можете использовать this->
idAssignedToEntryWidget.delete(first = 0, last = UpperLimitAssignedToEntryWidget)
например, ->
назначенный идентификатор is = en тогда
en.delete (первый = 0, последний = 100)
Ответ 9
Попробуйте следующее:
import os
os.system('clear')