You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决CustomTkinter按钮重复点击后温度标签重复显示问题

解决CustomTkinter天气应用标签叠加问题

问题核心是每次点击搜索按钮时,你都会新建一个CTkLabel控件,旧标签未被销毁,导致叠加显示。以下是两种可行的解决方法:

方法一:提前初始化标签,仅更新文本内容

这种方式更高效,无需反复创建销毁控件,程序启动时创建一次标签,后续搜索直接更新文本即可。

修改后的代码:

import Weather
import customtkinter as ctk
import threading

def search_weather():
    global dis_temp
    city = weather_ser.get()
    if not city:
        return
    
    temp = Weather.get_temp(city)
    # 直接更新已有标签的文本内容
    dis_temp.configure(text=f'Temperature: {temp}')
    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)

# 提前初始化温度显示标签,初始文本为空
dis_temp = ctk.CTkLabel(master=frame, text="", font=("Ariel", 16))
dis_temp.pack(padx=5, pady=5)

mainwindow.mainloop()

方法二:每次搜索前销毁旧标签

如果坚持每次创建新标签,需保存旧标签的引用,搜索前先销毁旧标签再创建新的:

修改后的代码:

import Weather
import customtkinter as ctk
import threading

dis_temp = None  # 全局变量存储标签引用

def search_weather():
    global dis_temp
    city = weather_ser.get()
    if not city:
        return
    
    temp = Weather.get_temp(city)
    # 若旧标签存在,先销毁
    if dis_temp is not None:
        dis_temp.destroy()
    
    # 创建新的温度标签
    dis_temp = ctk.CTkLabel(master=frame, text=f'Temperature: {temp}', font=("Ariel", 16))
    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()

额外提示

  • 两种方法都用了全局变量管理标签,后续可改用类封装控件逻辑,避免全局变量的使用。
  • 加入空输入判断,能防止空城市名导致Weather模块报错。

内容的提问来源于stack exchange,提问作者LIlkahuna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 06:47:32