在Tkinter中,如何在按钮按下后清空Entry小部件?

56 投票
13 回答
288276 浏览
提问于 2025-04-15 19:15

我想在用户按下按钮后,清空Tkinter中的Entry小部件。

我试着用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()

13 个回答

5

real 获取的是 ent.get() 的值,这个值其实就是一个字符串。它并不知道这个字符串是从哪里来的,也无法对这个输入框(widget)进行任何操作。

与其使用 real.delete(),不如直接在输入框(entry widget)上调用 .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))
18

我不太明白你的问题。从这个链接来看,似乎在你调用删除操作之后,你只需要进行一次赋值。要在这个小部件中添加文本,可以使用插入方法。如果你想替换当前的文本,可以先调用删除,然后再插入新的文本。

e = Entry(master)
e.pack()

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

你能多发一点代码吗?

99

在浏览了一下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()

撰写回答