问题提出者是一位 Python 新手,他想要在 Tkinter 界面中实现擦除功能,即当调用 Yes() 函数时,界面中的所有部件都被清除。问题在于提问者难以理解其他人的回答,希望有人能够在他提供的代码中实现擦除功能。
2、解决方案
我们可以使用 destroy 方法来删除部件,当删除部件时,其子部件也会被删除。因此,如果我们要删除框架中的所有部件,只需删除该框架即可。如果不想删除它们,也可以使用 grid_remove、grid_forget、pack_forget 或 place_forget 方法,具体取决于部件的放置方式。当然,除了删除部件或将其从屏幕中移除之外,还可以重置部件的值。如何重置取决于部件的类型,但所有部件都可以重新配置而无需销毁。
from tkinter import *
def Done():
celEntry = celTempVar.get()
print(str(celEntry))
f = open("Name", "w")
f.write(str(celEntry))
f.close()
def Yes():
for widget in mainframe.winfo_children():
widget.destroy()
# 创建新界面
titleLabel = Label(mainframe, text="New Game", font=("Arial", 20, "bold"), justify=CENTER)
titleLabel.grid(row=1, column=1, columnspan=3, pady=10, padx=20)
DoneButton = Button(mainframe, text="Start", font=("Arial", 8, "bold"), relief=RAISED, bd=5, justify=CENTER,
highlightbackground="red", overrelief=GROOVE, activebackground="black",
activeforeground="blue", command=Done)
DoneButton.grid(row=4, column=1, ipady=8, ipadx=12, pady=5, sticky=NW, padx=55)
###MAIN###
root = Tk()
root.title("Text Adv")
mainframe = Frame(root)
mainframe.grid()
celTempVar = StringVar()
celTempVar.set("")
titleLabel = Label(mainframe, text="Text adventure", font=("Arial", 20, "bold"), justify=CENTER)
titleLabel.grid(row=1, column=1, columnspan=3, pady=10, padx=20)
f = open("Name", "r")
Name = f.read()
if Name == "":
celEntry = Entry(mainframe, width=10, bd=5, textvariable=celTempVar)
celEntry.grid(row=3, column=1, pady=10, sticky=NW, padx=125)
titleLabel = Label(mainframe, text="Enter Name", font=("Arial", 12, "bold"), justify=LEFT)
titleLabel.grid(row=2, column=1, columnspan=3, pady=10, padx=20)
DoneButton = Button(mainframe, text="Done", font=("Arial", 8, "bold"), relief=RAISED, bd=5, justify=CENTER,
highlightbackground="red", overrelief=GROOVE, activebackground="black",
activeforeground="blue", command=Done)
DoneButton.grid(row=4, column=1, ipady=8, ipadx=12, pady=5, sticky=NW, padx=55)
else:
titleLabel = Label(mainframe, text="Start new game?", font=("Arial", 12, "bold"), justify=LEFT)
titleLabel.grid(row=2, column=1, columnspan=3, pady=10, padx=20)
DoneButton = Button(mainframe, text="Yes", font=("Arial", 8, "bold"), relief=RAISED, bd=5, justify=CENTER,
highlightbackground="red", overrelief=GROOVE, activebackground="black",
activeforeground="blue", command=Yes)
DoneButton.grid(row=3, column=1, ipady=8, ipadx=12, pady=5, sticky=NW, padx=55)
DoneButton = Button(mainframe, text="No", font=("Arial", 8, "bold"), relief=RAISED, bd=5, justify=CENTER,
highlightbackground="red", overrelief=GROOVE, activebackground="black",
activeforeground="blue", command=Done)
DoneButton.grid(row=4, column=1, ipady=8, ipadx=12, pady=5, sticky=NW, padx=55)
root.mainloop()