Как очистить виджет Записи после того, как кнопка нажимается в Tkinter?

Я пытаюсь очиститься Entry виджет после пользователя нажимает использование кнопки Tkinter.

Я пытался использовать ent.delete(0, END), но я получил ошибку при высказывании, что строки не имеют атрибута, удаляют.

Вот мой код, где я надеваю ошибку 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()
26
задан nbro 20 March 2015 в 23:39
поделиться

4 ответа

После того, как я немного покопался в Введение в Tkinter , я придумал приведенный ниже код, который ничего не делает, кроме отображения текста. и очистите его при нажатии кнопки «Очистить текст» :

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()
47
ответ дан 28 November 2019 в 06:53
поделиться

Ваша база данных, скорее всего, переживет любое приложение, которое вы создадите сегодня. Вся производительность и масштабируемость будут определяться схемой базы данных. Разумная модель базы данных - это основа, на которой строится любое приложение, и я бы сказал, что именно здесь вы должны инвестировать больше всего усилий в проектирование и тестирование, поскольку это даст самые большие преимущества.

При этом, конечно, ваше приложение предпочтет манипулировать доменными сущностями, а манипулирование неестественными сущностями, движимыми реляционной теорией, в отличие от бизнес-сущностей, просто усложнит ситуацию. Я считаю, что это роль ORM, чтобы соответствовать двум, как можно лучше. Но всякий раз, когда возникают неизбежные конфликты, право выбора пути должно быть дано движущим фактором вашей производительности и масштабируемости: схемой базы данных.

-121--3677597-

Функция, вызывающая крючок pre_post_update, появляется в строке 1525 wp-includes/posts.php для меня:

do_action( 'pre_post_update', $post_ID );

Как вы видите, она передает идентификатор обновляемой публикации при ее выполнении. Чтобы получить публикацию оттуда, вы бы просто вызвать get _ post () , например:

function do_something_with_a_post($post_id, $post_data) {
     // now do something with $post_data
}
add_action('pre_post_update', 'do_something_with_a_post', 10, 2);

Переменная $ post выше должна ссылаться на объект со всеми различными атрибутами о публикации, которую вы ищете, надеюсь.

-121--4746239-

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

e = Entry(master)
e.pack()

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

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

3
ответ дан 28 November 2019 в 06:53
поделиться

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

8
ответ дан 28 November 2019 в 06:53
поделиться

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))
5
ответ дан 28 November 2019 в 06:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: