Как удалить 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')