重置按钮可删除所有用户输入数据

问题描述 投票:0回答:1

我创建的 “清除数据” 按钮有问题,由于我是 Tkinter 的新手,我想知道是否有人可以帮助我。我试图让程序在单击按钮后清除用户数据输入,但到目前为止,我只是无法弄清楚这一点。代码如下所示。我试了好久,还是没搞明白。

global entry
entry = StringVar()

def cleardata():
    entry.delete(1.0, END)

def btn1function():
    top = tkinter.Toplevel(root)
    top.title("ADD RECORDS")
    frame = tk.Frame(top)
    bg = ImageTk.PhotoImage(file="latestadrec.png")
    labl = tk.Label(frame, image=bg)
    labl.img = bg
    labl.place(relx=0.5, rely=0.5, anchor='center')

    fname = tk.Label(frame, text="First Name:", font=('Bold', 16))
    fname.place(x=50, y=400)
    fnameEntry = tk.Entry(frame, textvariable=firstname, font=('Bold', 16))
    fnameEntry.place(x=220, y=400, width=180)

    lname = tk.Label(frame, text="Last Name:", font=('Bold', 16))
    lname.place(x=50, y=450)
    lnameEntry = tk.Entry(frame, textvariable=lastname, font=('Bold', 16))
    lnameEntry.place(x=220, y=450, width=180)

    address = tk.Label(frame, text="Address:", font=('Bold', 16))
    address.place(x=50, y=500)
    addressEntry = tk.Entry(frame, textvariable=address1, font=('Bold', 16))
    addressEntry.place(x=220, y=500, width=180)

    conum = tk.Label(frame, text="Contact Number:", font=('Bold', 16))
    conum.place(x=50, y=550)
    conumEntry = tk.Entry(frame, textvariable=connum, font=('Bold', 16))
    conumEntry.place(x=220, y=550, width=180)

    email = tk.Label(frame, text="Email:", font=('Bold', 16))
    email.place(x=50, y=600)
    emailEntry = tk.Entry(frame, textvariable=email1, font=('Bold', 16))
    emailEntry.place(x=220, y=600, width=180)

    petname = tk.Label(frame, text="Pet name:", font=('Bold', 16))
    petname.place(x=650, y=400)
    petnameEntry = tk.Entry(frame,textvariable=pname, font=('Bold', 16))
    petnameEntry.place(x=790, y=400, width=180)

    gender = tk.Label(frame, text="Gender:", font=('Bold', 16))
    gender.place(x=650, y=450)
    genderEntry = tk.Entry(frame,textvariable=gender1, font=('Bold', 16))
    genderEntry.place(x=790, y=450, width=180)

    breed = tk.Label(frame, text="Breed:", font=('Bold', 16))
    breed.place(x=650, y=500)
    breedEntry = tk.Entry(frame,textvariable=breed1, font=('Bold', 16))
    breedEntry.place(x=790, y=500, width=180)

    birth = tk.Label(frame, text="Birth Date:", font=('Bold', 16))
    birth.place(x=650, y=550)
    birthEntry = tk.Entry(frame,textvariable=birth1, font=('Bold', 16))
    birthEntry.place(x=790, y=550, width=180)

    problem = tk.Label(frame, text="Problem:", font=('Bold', 16))
    problem.place(x=650, y=600)
    problemEntry = tk.Entry(frame,textvariable=problem1, font=('Bold', 16))
    problemEntry.place(x=790, y=600, width=180)

    button = tk.Button(frame, text="SUBMIT DATA", command=savefile, font=('Bold', 14))
    button.place(x=300, y=700)

    button2 = tk.Button(frame, text="CLEAR DATA", command=cleardata, font=('Bold', 14))
    button2.place(x=550, y=700)

    frame.pack(pady=10)
    frame.pack_propagate(False)
    frame.configure(width=1000, height=800)
python-3.x tkinter tkinter-entry tkinter-button
1个回答
2
投票

如果您要删除文本,则必须使用

delete
小部件的
Entry
方法,最好将所有条目放入列表中并循环遍历它们,而不是逐一执行。

def cleardata():
    for ent in ent_list:
        ent.delete(0, 'end')

def btn1function():
    global ent_list
    ...
    ent_list = [fnameEntry, lnameEntry, ...]

或者您也可以在主要部分(函数外部)中创建列表,然后使用其

append()
方法将每个条目添加到列表中。第一个解决方案可能代码更少并且更具可读性。

或者如果您想避免全球化列表,则将列表作为参数传递:

def cleardata(ent_list):
    for ent in ent_list:
        ent.delete(0, 'end')

def btn1function():
    ...
    ent_list = [fnameEntry, lnameEntry, ...]
    
    button2 = tk.Button(..., command=lambda: cleardata(ent_list))
© www.soinside.com 2019 - 2024. All rights reserved.