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

时间:2010-02-14 05:35:46

标签: python user-interface widget tkinter

我正在尝试在用户使用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()

12 个答案:

答案 0 :(得分:38)

Introduction to Tkinter稍微探讨了一下后,我想出了下面的代码,除了显示文本字段并按下"Clear text"按钮时清除它,它什么都不做:< / p>

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()

答案 1 :(得分:8)

假设ent.delete(0, END)是对条目小部件的正确引用,

ent是正确的答案。如果您收到您所说的错误,则代码中会出错。如果您无法自己发现错误,则需要向我们展示代码。

答案 2 :(得分:4)

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))

答案 3 :(得分:2)

我不清楚你的问题。来自http://effbot.org/tkinterbook/entry.htm#patterns,它 看来你只需要在调用删除后进行一项任务。 要向窗口小部件添加条目文本,请使用insert方法。要替换当前文本,可以在插入新文本之前调用delete。

e = Entry(master)
e.pack()

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

你可以发布更多代码吗?

答案 4 :(得分:0)

首先,确保启用了文本,然后删除标签,然后删除内容。

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

当文本为&#34; DISABLE&#34;时,删除不起作用,因为文本字段处于只读模式。

答案 5 :(得分:0)

您应继续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()

这将解决您的问题

答案 6 :(得分:0)

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()                       

输入是在条目中设置textvariable,它是字符串变量,当我将字符串变量的文本设置为“”时,这将清除条目中的文本

答案 7 :(得分:0)

只需定义一个函数,然后将组合框的值设置为空/空或任何您想要的值即可。请尝试以下操作。

def Reset():
    cmb.set("")

在这里,cmb是一个变量,您已在其中分配了组合框。现在,在

之类的按钮中调用该函数
btn2 = ttk.Button(root, text="Reset",command=Reset)

答案 8 :(得分:0)

如果使用的是Python 3.x,则必须使用

txt_entry =条目(根)

txt_entry.pack()

txt_entry.delete(0,tkinter.END)

答案 9 :(得分:0)

如果添加打印代码以检查real的类型,您将看到real是一个字符串,而不是Entry,因此没有delete属性。

def res(real, secret):
    print(type(real))
    if secret==eval(real):
        showinfo(message='that is right!')
    real.delete(0, END)

>> output: <class 'str'>

解决方案:

secret = randrange(1,100)
print(secret)

def res(real, secret):
    if secret==eval(real):
        showinfo(message='that is right!')
    ent.delete(0, END)    # we call the entry an delete its content

def guess():

    ge = Tk()
    ge.title('guessing game')

    Label(ge, text="what is your guess:").pack(side=TOP)

    global ent    # Globalize ent to use it in other function
    ent = Entry(ge)
    ent.pack(side=TOP)

    btn=Button(ge, text="Enter", command=lambda: res(ent.get(),secret))
    btn.pack(side=LEFT)

    ge.mainloop()

应该可以。

答案 10 :(得分:-1)

如果上述方法均无效,则可以使用this->

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

例如->

id分配的是= en然后

en.delete(first = 0,last = 100)

答案 11 :(得分:-6)

试试这个:

import os
os.system('clear')