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

Dan*_*Dan 26 python user-interface tkinter widget

我试图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()
Run Code Online (Sandbox Code Playgroud)

Gre*_*att 47

在通过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()
Run Code Online (Sandbox Code Playgroud)

  • 您可以提供参数 END(或“end”)而不是计算数据的长度。由于您说它不起作用但没有定义“不起作用”(即:您是否收到错误,或者它是否无声地失败了?),我猜您使用了不合格的“END”。试试“Tkinter.END”。当我在上面的代码中使用它时,它工作得很好。 (2认同)

Cha*_*iam 15

你的问题我不清楚。从http://effbot.org/tkinterbook/entry.htm#patterns来看,您似乎只需要在调用删除后进行分配即可。要将条目文本添加到小部件,请使用插入方法。要替换当前文本,您可以在插入新文本之前调用 delete。

e = Entry(master)
e.pack()

e.delete(0, END)
e.insert(0, "")
Run Code Online (Sandbox Code Playgroud)

你能贴多一点代码吗?


Bry*_*ley 8

ent.delete(0, END)是正确的答案,假设它ent是对条目小部件的适当引用.如果您收到您所说的错误,则代码中会出错.如果您无法自己发现错误,则需要向我们展示代码.


Ben*_*kin 5

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))
Run Code Online (Sandbox Code Playgroud)