Как очистить виджет «Ввод» после нажатия кнопки в Tkinter? - PullRequest
22 голосов
/ 14 февраля 2010

Я пытаюсь очистить виджет 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()

Ответы [ 8 ]

40 голосов
/ 14 февраля 2010

Пройдя немного по Знакомству с 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()
8 голосов
/ 14 февраля 2010

ent.delete(0, END) - правильный ответ, при условии, что ent - правильная ссылка на виджет ввода. Если вы получили сообщение об ошибке, значит, в вашем коде есть ошибка. Вам нужно будет показать нам код, если вы не можете обнаружить ошибку самостоятельно.

4 голосов
/ 14 февраля 2010

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))
2 голосов
/ 14 февраля 2010

Мне неясен ваш вопрос. От http://effbot.org/tkinterbook/entry.htm#patterns, это кажется, вам просто нужно сделать назначение после того, как вы вызвали удаление. Чтобы добавить текст записи в виджет, используйте метод вставки. Чтобы заменить текущий текст, вы можете вызвать команду «Удалить» перед тем, как вставить новый текст.

e = Entry(master)
e.pack()

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

Не могли бы вы опубликовать немного больше кода?

0 голосов
/ 10 февраля 2019

, если ничего из вышеперечисленного не работает, вы можете использовать это ->

idAssignedToEntryWidget.delete (first = 0, last = UpperLimitAssignedToEntryWidget)

например ->

идентификатор назначен = en, затем

en.delete (первый = 0, последний = 100)

0 голосов
/ 05 августа 2017

Вы должны продолжить с ent.delete(0,"end") вместо '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()

Это решит вашу проблему

0 голосов
/ 30 июня 2016

Прежде всего, убедитесь, что текст включен, затем удалите теги, а затем содержимое.

myText.config(state=NORMAL)
myText.tag_delete ("myTags")
myText.delete(1.0, END)

Когда для текста установлено значение «ОТКЛЮЧЕНО», удаление не работает, поскольку текстовое поле находится в режиме только для чтения.

0 голосов
/ 14 января 2014

Попробуйте с этим:

import os
os.system('clear')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...