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

如何从weatherapi.com获取天气图标并在Python-Tkinter应用中更新?

解决WeatherAPI天气图标获取与Tkinter更新问题

一、从WeatherAPI返回的JSON中获取图标URL

根据你提供的JSON结构,天气图标的URL位于current -> condition -> icon路径下。修改weather.py中的getConditionIcon方法,直接从已获取的JSON数据中提取该字段:

def getConditionIcon(self):
    # 假设self.data是请求API后解析得到的JSON字典
    return self.data["current"]["condition"]["icon"]

二、在Tkinter中更新天气图标

Tkinter的Label无法直接加载远程URL图片,需要借助Pillow库处理图片,步骤如下:

1. 安装依赖

先安装所需的第三方库:

pip install pillow requests

2. 修改view.py代码

  • 导入必要模块:
from PIL import Image, ImageTk
import requests
import io
  • 调整_createFrameInfo方法,将图标Label设为实例变量,方便后续更新:
def _createFrameInfo(self):
    self.frameInfo = Frame(self.mainframe)
    
    labelTemp = Label(self.frameInfo, textvariable=self.varTemp)
    labelLocation = Label(self.frameInfo, textvariable=self.varLocation)
    # 将labelIcon改为实例变量
    self.labelIcon = Label(self.frameInfo, text='image')

    labelTemp.pack(pady = 5)
    labelLocation.pack(pady = 5)
    self.labelIcon.pack(pady = 5)
    self.frameInfo.pack()
  • 添加更新图标的方法到View类中:
def update_icon(self, icon_url):
    # 请求获取图片字节流
    response = requests.get(icon_url)
    img_data = response.content
    # 加载图片并调整尺寸(可根据界面需求修改大小)
    img = Image.open(io.BytesIO(img_data))
    img = img.resize((64, 64), Image.Resampling.LANCZOS)
    # 转换为Tkinter可用的PhotoImage
    photo = ImageTk.PhotoImage(img)
    # 更新Label的图片,需保留引用避免被垃圾回收机制销毁
    self.labelIcon.config(image=photo)
    self.labelIcon.image = photo

3. 触发图标更新

在你查询新城市天气的逻辑中,当获取到最新的天气数据后,调用以下代码更新图标:

# 假设weather是Weather类的实例,view是View类的实例
icon_url = weather.getConditionIcon()
view.update_icon(icon_url)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:08:10