Как удалить customtkinter после повторного нажатия кнопки

Я пытался разработать приложение python для погоды, и я столкнулся с проблемой, о которой не могу найти никакой информации. Когда я нажимаю кнопку, она дает мне температуру, а в какой-то момент в будущем погоду и другие вещи. Итак, после того, как я нажму кнопку, она отобразит температуру, а если я нажму ее еще раз, отобразится старая и новая температура. Как мне это исправить?

      import Weather
import customtkinter as ctk
import threading


def search_weather():

    city = weather_ser.get()

    temp = Weather.get_temp(city)
    weather = Weather.get_weather(city)

    dis_temp = ctk.CTkLabel(master=frame, text="", font=("Ariel", 16))
    dis_temp.configure(f'Temperature: {temp}')
    dis_temp.pack(padx=5, pady=5)


    weather_ser.delete(0, 'end')



mainwindow = ctk.CTk()
mainwindow.geometry("400x600")
mainwindow.title("Weather App")
mainwindow.iconbitmap('WeatherIco.ico')

frame = ctk.CTkFrame(master=mainwindow)
frame.pack()

label = ctk.CTkLabel(master=frame, text="Search for Cities", font=("Ariel", 24))
label.pack(padx=10, pady=10)

weather_ser = ctk.CTkEntry(master=frame, placeholder_text="Search for a city")
weather_ser.pack(padx=20, pady=20)

search = ctk.CTkButton(master=frame, text="Search", command=search_weather)
search.pack(padx=8, pady=8)

mainwindow.mainloop()

-уничтожение этикетки, но я мог сделать это неправильно

1 ответ

Это потому, что каждый раз, когда вы звонитеsearch_weather()- новыйLabelэлемент добавляется кframe.

Все элементы вашего приложения упакованы во фрейм, поэтому внутриsearch_weater, перед добавлением новогоdis_tempМетка к кадру, вы должны удалить все предыдущие метки. Вы можете сделать это так:

      def search_weather():
    city = weather_ser.get()

    temp = Weather.get_temp(city)
    weather = Weather.get_weather(city)

    # Removing all labels inside frame
    for child in frame.winfo_children():
        if child.widgetName == "label":
            child.destroy()

    dis_temp = ctk.CTkLabel(master=frame, text="", font=("Ariel", 16))
    dis_temp.configure(f'Temperature: {temp}')
    dis_temp.pack(padx=5, pady=5)

    weather_ser.delete(0, 'end')
Другие вопросы по тегам