簡體   English   中英

Tkinter - 刪除 n 個無名標簽

[英]Tkinter - Removing n nameless Labels

我會盡量舉例說明。 我正在開發一個程序,其中我將數據記錄在 database.db 中,並通過SQLite3庫訪問它。 我創建了一個 function 來返回我想要的特定列的數據,它將是帶有返回數據的幾個標簽。 在這個程序中,我使用.pack()方法,並且我知道如果我使用pack_forget()命令, Label將從 window 中刪除,我每次進行新查詢。 問題是,由於每個返回的數據都有幾個標簽,所以我沒有為每個 Label 創建名稱,現在我遇到了這個問題。 對於每次搜索,我想刪除最新搜索的所有標簽。 如果標簽沒有變量名,如何從 window 中刪除標簽。 下面是一個例子:

def clear():
    # ???
    Label.pack_forget()

def search(v):
    # 'v' cames from Entry's textvariable
    tmp4Label = []

    var4Len = list(c.execute(
        f'SELECT * FROM table WHERE element = "{v.get()}"').fetchall())

    for i in range(len(var4Len)):
        # Getting just the first column data
        #'c' is the cursor
        a.append(list(c.execute(
            f'SELECT * FROM table WHERE element = "{v.get()}"').fetchall())[i][0])

    for i in tmp4Label:
        # Labels for each data, removing '[' and ']' characters
        Label(root, text=f"{str([i]).replace('[', '').replace(']', '')}",font=('Arial 18 bold')).pack()

在此處輸入圖像描述

一種解決方案是將標簽存儲在列表中:

list_of_labels = []

def clear():
    while list_of_labels:
        list_of_labels.pop().pack_forget() # remove from the list

def search(v):
    for i in tmp4Label:
        lbl = Label(root, text=i)
        lbl.pack()
        list_of_labels.append(lbl) # add to the list

另一種解決方案是使用單個 label 而不是一堆。

def clear():
    data_label.pack_forget() 

def search(v):
    global data_label
    data_label = Label(root, text='\n'.join(map(str, tmp4Label)))
    data_label.pack()
    

無論您做什么,使用 2 行定義 Label 非常重要。 第一個定義它,第二個布置它(打包)。 你不能合並這兩條線。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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