【问题标题】:Tkinter - Removing n nameless LabelsTkinter - 删除 n 个无名标签
【发布时间】:2021-04-10 18:55:45
【问题描述】:

我会尽量举例说明。 我正在开发一个程序,其中我将数据记录在 database.db 中,并通过 SQLite3 库访问它。我创建了一个函数来返回我想要的特定列的数据,它将是几个带有返回数据的标签。 在这个程序中,我使用.pack() 方法,并且我知道如果我使用pack_forget() 命令,Label 将随着我进行的每个新查询从窗口中删除。 问题是,由于每个返回的数据都有几个标签,所以我没有为每个标签创建名称,现在我遇到了这个问题。对于每次搜索,我想删除最新搜索的所有标签。如果标签没有变量名,如何从窗口中删除它们。下面是一个例子:

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()

【问题讨论】:

    标签: python sqlite tkinter label


    【解决方案1】:

    一种解决方案是将标签存储在列表中:

    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
    

    另一种解决方案是使用单个标签而不是一堆标签。

    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 行来定义标签都非常重要。第一个定义它,第二个布置它(打包)。你不能合并这两行。

    【讨论】:

    • 这是一个好主意,让单个项目半匿名。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 2016-01-23
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多