[英]tkinter: How can I remove labels created by for loops?
我有一個名為data
的數據列表,我使用 for 循環在 GUI 中顯示數據
for i in range(len(data)):
data_label = Label(root, text=data[i])
data_label.grid(row=i, column=0)
我試圖創建一個按鈕,旨在通過單擊此照片GUI 圖像中所示的按鈕來刪除所有標簽。 但是,只會刪除最后一個數據(即 9)。 我想知道如何通過單擊按鈕刪除所有數據。 我想這是因為data_label
只引用 for 循環末尾的最后一個數據,但我不知道如何制作data_label
這是整個代碼:
from tkinter import *
root = tk.Tk()
data = [1, 3, 5, 7, 9]
for i in range(len(data)):
data_label = Label(root, text=data[i])
data_label.grid(row=i, column=0)
def remove_label():
data_label["text"] = ""
button = Button(root, text="Remove", command=remove_label)
button.grid(row=0, column=1)
root.mainloop()
Append 將您的標簽添加到列表中,然后遍歷列表以刪除文本:
from tkinter import *
root = tk.Tk()
data = [1, 3, 5, 7, 9]
data_labels = []
for i in range(len(data)):
data_label = Label(root, text=data[i])
data_label.grid(row=i, column=0)
data_labels.append(data_label)
def remove_label():
for data_label in data_labels:
data_label["text"] = ""
button = Button(root, text="Remove", command=remove_label)
button.grid(row=0, column=1)
root.mainloop()
您可以利用 tkinter 網格幾何管理器跟蹤其控制下的所有小部件的行和列位置這一事實來做到這一點。 這意味着您可以從中獲取 0 所需的信息,而不是自己跟蹤它(在某些情況下,例如這種情況)。 您可以通過調用其grid_info()
方法來獲取有關特定小部件的網格信息。
這說明了我在說什么:
from tkinter import *
root = Tk()
data = [1, 3, 5, 7, 9]
for i in range(len(data)):
data_label = Label(root, text=data[i])
data_label.grid(row=i+1, column=0)
def remove_data_labels():
col = data_label.grid_info()['column'] # Column data_labels are in.
# Create list of all the widgets in this same column.
widgets = data_label.master.grid_slaves(column=col)
# Remove the text from all the Labels in same column.
for widget in widgets:
if isinstance(widget, Label):
widget.config(text='')
button = Button(root, text="Remove", command=remove_data_labels)
button.grid(row=0, column=1)
root.mainloop()
如何刪除由 for 循環創建的標簽?
data_labels
中循環Label.destroy()
銷毀所有Label
而不是text=
代碼:
from tkinter import *
root = Tk()
data = [1, 3, 5, 7, 9]
data_labels = []
def remove_label():
for label in data_labels:
label.destroy()
for i in range(len(data)):
data_label = Label(root, text=data[i])
data_label.grid(row=i, column=0)
data_labels.append(data_label)
button = Button(root, text="Remove", command=remove_label)
button.grid(row=0, column=1)
root.mainloop()
截屏:
截圖刪除所有標簽:
將 remove_label function 更改為:
def remove_label():
for i in range(len(data)):
data_label = Label(root, text="")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.