tkinter:如何编写 for 循环来销毁标签列表?
tkinter: how to write a for loop to destroy a list of labels?
我正在尝试从网格中删除这些元素。我能够通过一个一个地写出来来删除所有这些。然后我写了一个 for 循环使其可扩展,然后我 运行 进入此错误消息。
"employee.destroy()
AttributeError: 'str' object has no attribute 'destroy'"
这是一个更大程序的一部分,但我可以尽可能减少核心问题,这是我的代码:
import tkinter as tk
from tkinter import ttk
labelemployee={}
class Application(ttk.Frame): #inherent from frame.
def __init__(self, parent):
tk.Frame.__init__(self, parent, bg="LightBlue4")
self.parent = parent
self.Employees = ["A", "B", "C", "D"]
self.pack(fill=tk.BOTH, expand=1)
self.GUI()
def GUI(self): #the function that runs all the GUI functions.
self.buttons()
self.create_grid()
self.add_left_names()
def remove(self):
#labelemployee["A"].destroy()
#labelemployee["B"].destroy()
#labelemployee["C"].destroy()
#labelemployee["D"].destroy()
for employee in labelemployee:
employee.destroy()
def create_grid(self):
for i in range (7):
for j in range(7):
self.label = tk.Label(self, relief="ridge", width=12,
height=3)
self.label.grid(row=i, column=j, sticky='nsew')
def buttons(self):
self.button=tk.Button(self, text="Clear", bg="salmon", command
= self.remove)
self.button.grid(row=7, column=6, sticky='e')
def add_left_names(self):
#--------add in name labels on the side--------------
i=2
for employee in self.Employees:
self.label=tk.Label(self, text=employee , fg="red",
bg="snow")
self.label.grid(row=i,column=0)
labelemployee[employee]=self.label
i +=1
def main():
root = tk.Tk()
root.title("class basic window")
root.geometry("1000x500")
root.config(background="LightBlue4")
app = Application(root)
root.mainloop()
if __name__ == '__main__':
main()
请帮帮我。我认为问题是我的 for 循环存储了一个列表,而我有一本字典。所以,我想我不知道如何销毁字典中的标签。
您已经在这些评论中找到问题了!
您已经知道 labelemployee
是一个字典,因此遍历它会默认为您提供字典的键。所以 employee
将是像 A, B... 这样的字符串。并且破坏一个字符串对象显然会给你一个错误。您需要销毁相应的 tkinter 小部件。因此,为此,您应该在 for 循环中将 employee.destroy()
替换为 labelemployee[employee].destroy()
。
我正在尝试从网格中删除这些元素。我能够通过一个一个地写出来来删除所有这些。然后我写了一个 for 循环使其可扩展,然后我 运行 进入此错误消息。
"employee.destroy()
AttributeError: 'str' object has no attribute 'destroy'"
这是一个更大程序的一部分,但我可以尽可能减少核心问题,这是我的代码:
import tkinter as tk
from tkinter import ttk
labelemployee={}
class Application(ttk.Frame): #inherent from frame.
def __init__(self, parent):
tk.Frame.__init__(self, parent, bg="LightBlue4")
self.parent = parent
self.Employees = ["A", "B", "C", "D"]
self.pack(fill=tk.BOTH, expand=1)
self.GUI()
def GUI(self): #the function that runs all the GUI functions.
self.buttons()
self.create_grid()
self.add_left_names()
def remove(self):
#labelemployee["A"].destroy()
#labelemployee["B"].destroy()
#labelemployee["C"].destroy()
#labelemployee["D"].destroy()
for employee in labelemployee:
employee.destroy()
def create_grid(self):
for i in range (7):
for j in range(7):
self.label = tk.Label(self, relief="ridge", width=12,
height=3)
self.label.grid(row=i, column=j, sticky='nsew')
def buttons(self):
self.button=tk.Button(self, text="Clear", bg="salmon", command
= self.remove)
self.button.grid(row=7, column=6, sticky='e')
def add_left_names(self):
#--------add in name labels on the side--------------
i=2
for employee in self.Employees:
self.label=tk.Label(self, text=employee , fg="red",
bg="snow")
self.label.grid(row=i,column=0)
labelemployee[employee]=self.label
i +=1
def main():
root = tk.Tk()
root.title("class basic window")
root.geometry("1000x500")
root.config(background="LightBlue4")
app = Application(root)
root.mainloop()
if __name__ == '__main__':
main()
请帮帮我。我认为问题是我的 for 循环存储了一个列表,而我有一本字典。所以,我想我不知道如何销毁字典中的标签。
您已经在这些评论中找到问题了!
您已经知道 labelemployee
是一个字典,因此遍历它会默认为您提供字典的键。所以 employee
将是像 A, B... 这样的字符串。并且破坏一个字符串对象显然会给你一个错误。您需要销毁相应的 tkinter 小部件。因此,为此,您应该在 for 循环中将 employee.destroy()
替换为 labelemployee[employee].destroy()
。