Как очистить виджет ввода после нажатия кнопки в 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')