В tkinter, как мне удалить метки из одной функции, когда я запускаю поиск, и результаты отображаются в виде новых меток?

#python #function #tkinter #label #overlap

#python #функция #tkinter #метка #перекрытие

Вопрос:

У меня есть функция, которая отображает данные из таблицы при первом появлении моего окна:

 def query():
    conn = sqlite3.connect('movie_catalog.db')
    # Create cursor
    c = conn.cursor()

# Query the database
    c.execute("SELECT *, oid FROM movies ORDER BY title ASC")
    records = c.fetchall()

    for index, x in enumerate(records):
        num = 0
        for y in x:
            query_label = Label(root, text=y)
            query_label.grid(row=index   2, column=num, pady=2)
            num  = 1

    # Commit our changes
    conn.commit()

    # Close database connection
    conn.close()
  

У меня запущен цикл, чтобы каждая строка данных в моей таблице отображалась в новой строке в моем окне. Но я хочу, чтобы они исчезли, когда я запускаю следующую функцию поиска:

 def search_movies():
    # Create a database or connect to one
    conn = sqlite3.connect('movie_catalog.db')
    # Create cursor
    c = conn.cursor()

    selected = drop.get()
    if selected == "Search by":
        test = Label(root, text="Please make a selection")
        test.grid(row=0, column=6)
    if selected == "Title":
        sql = "SELECT * FROM movies WHERE title=?"
    if selected == "Year":
        sql = "SELECT * FROM movies WHERE year=?"
    if selected == "Genre":
        sql = "SELECT * FROM movies WHERE genre=?"
    if selected == "Director":
        sql = "SELECT * FROM movies WHERE director=?"
    if selected == "Cast":
        sql = "SELECT * FROM movies WHERE cast=?"
    if selected == "Tags":
        sql = "SELECT * FROM movies WHERE tags=?"

    searched = search_box.get()
    caps = searched.title()
    t = (caps, )
    result = c.execute(sql, t)
    result = c.fetchall()
    if result:
        for index, x in enumerate(result):
            num = 0
            for y in x:
                searched_label = Label(root, text=y)
                searched_label.grid(row=index   2, column=num, pady=2)
                num  = 1

    if not result:
        no_result = Label(root, text="Movie not found")
        no_result.grid(row=2, column=2)

    # Commit our changes
    conn.commit()

    # Close database connection
    conn.close()
  

Эта функция поиска, по сути, настроена на отображение результатов в том же формате, что и первая функция, но мне нужно, чтобы исходные метки исчезли, потому что мои результаты поиска перекрывают их. Есть ли способ уничтожить () отображение из первой функции?

Комментарии:

1. Что вы хотите уничтожить?

2. Я хочу уничтожить метки, которые были созданы из первой функции (запроса). Эта функция отображает данные из моей таблицы, которая прямо сейчас состоит из 4 строк данных или меток. В функции поиска я хочу, чтобы эти 4 метки были уничтожены и заменены новой меткой или «результатами поиска».

3. Создать новое окно? а destroy() другое окно?

4. Я пробовал использовать оба query_label. destroy() и query_label.forget() , с query_label , установленным как глобальный. Ни одна из них не работает? Я бы предпочел сохранить их в том же окне.

5. Я имею в виду использовать root.destroy()