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