我试图通过将每个Label附加到列表中来完成此操作。
for tasks in range(0, num_tasks):
stat = 'IDLE'
active_labels.append(
Label(page2, text=rr, bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 10)).place(x=ys_adi1,
y=ys_adi3))
rr = rr + 1
active_labels.append(
Label(page2, text=rr, bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 10)).place(x=ys_adi2,
y=ys_adi4))
active_labels.append(
Label(page2, text=page_name1, bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 10)).place(x=name1,
y=name3))
active_labels.append(
Label(page2, text=page_name2, bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 10)).place(x=name2,
y=name4))
active_labels.append(
Label(page2, text=proxy_address, bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 10)).place(x=mm,
y=mn))
Label(page2, text=proxy_address, bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 10)).place(x=mm,
y=mna)
status_label1 = Label(page2, text=stat, bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 10)).place(
x=stat1, y=status_in1)
active_labels.append(status_label1)
status_label2 = Label(page2, text=stat, bg='#1C2833', fg='#FDFEFE', font=("Helvetica", 10)).place(
x=stat2, y=status_in2)
active_labels.append(status_label2)
并使用for循环遍历列表和每个.delete()。
for label in active_labels:
Label.destroy(label)
这可悲地是行不通的,即时消息再次卡在了如何解决这个问题上。
答案 0 :(得分:1)
您可以在winfo_children()
小部件上使用frame
,然后销毁每个child
小部件。
以下是示例:
import tkinter as tk
window = tk.Tk()
frame = tk.Frame(window)
frame.grid(row=0, column=0)
for i in range(10):
tk.Label(frame, text=f'Label {i}').grid(row=i, column=0)
window.mainloop()
上面的代码将在10
内制作frame
标签小部件
现在,在此winfo_children()
上使用frame
来获取每个child label widget
并销毁它们,然后在GUI中查看内容
import tkinter as tk
window = tk.Tk()
frame = tk.Frame(window)
frame.grid(row=0, column=0)
for i in range(10):
tk.Label(frame, text=f'Label {i}').grid(row=i, column=0)
# get the children widget and destroy them
for label in frame.winfo_children():
label.destroy()
window.mainloop()
这将破坏label
内的所有frame
小部件并返回一个empty
GUI
答案 1 :(得分:1)
代码的问题在于您要保存到active_labels
的内容。如果您对其进行检查,您将只会看到None
值列表。这是因为Label(...).place(...)
总是返回None
。
第一步是将窗口小部件的创建和窗口小部件的布局分开,以便您的active_labels
列表准确地包含所有标签。然后,您可以通过在每个标签上调用destroy
在循环中将其删除:
for label in active_labels:
label.destroy()
另一种解决方案是不用担心维护列表。任何小部件都可以返回其子级列表,因此您只需在该列表上循环即可:
for label in page2.winfo_children():
label.destroy()
注意:这假设您实际上是将标签放在page2
中,并且没有犯同样的错误,并且page2
设置为None
。