簡體   English   中英

tkinter:如何刪除 for 循環創建的標簽?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM