代码之家  ›  专栏  ›  技术社区  ›  EdMed

尝试使用失败。destroy()从GUI擦除数据结果

  •  0
  • EdMed  · 技术社区  · 3 年前

    我希望当用户选择一个按钮时,它会破坏所有显示的表结果。目前,表格结果仍然没有错误。根据下面的代码片段,有什么突出的地方吗?

    global searched_label
    searched_label.destroy()
    
    search = tracking_id_entry.get()
    sql = "SELECT * FROM table_desc WHERE tracking_id = %s"
    name = (search,)
    my_cursor.execute(sql, name)
    result = my_cursor.fetchall()
    
    if not result:
        result = "Tracking ID Not Found..."
        searched_label = Label(screen, text=result)
        searched_label.grid(row=7, columnspan=2, sticky=EW)
    
    else:
        for index, x in enumerate(result):
            num = 0
            index += 7
            for y in x:
                searched_label = Label(screen, text=y)
                searched_label.grid(row=index, column=num)
                num += 1
    
    1 回复  |  直到 3 年前
        1
  •  0
  •   acw1668    3 年前

    因为您使用了相同的变量 searched_label 对于所有标签,只有最后一个标签将被该行销毁 searched_label.destroy()

    您可以使用列表存储创建的标签,然后通过此列表销毁所有标签:

    labels = []  # list to store the labels
    
    # assume the posted code is inside a function
    def show_tracking():
        # destroy existing labels
        for lbl in labels:
            lbl.destroy()
        labels.clear() # clear the list
    
        # populate new labels
        search = tracking_id_entry.get()
        sql = "SELECT * FROM table_desc WHERE tracking_id = %s"
        name = (search,)
        my_cursor.execute(sql, name)
        result = my_cursor.fetchall()
    
        if not result:
            result = "Tracking ID Not Found..."
            searched_label = Label(screen, text=result)
            searched_label.grid(row=7, columnspan=2, sticky=EW)
            labels.append(searched_label) # add the label to the list
    
        else:
            for index, x in enumerate(result):
                num = 0
                index += 7
                for y in x:
                    searched_label = Label(screen, text=y)
                    searched_label.grid(row=index, column=num)
                    labels.append(searched_label) # add the label to the list
                    num += 1