英文:
(Python) How do I get the weather icon from weatherapi.com?
问题
我正在尝试使用Python和Tkinter制作一个天气应用程序。我正在使用weatherapi.com的天气API。我几乎都已经完成了,但是不知道如何从.json文件中获取图标URL,并在搜索不同城市或地点时更新图标。
这是view.py中的createFrameInfo代码:
# 当前条件信息,显示“图像”的文本是实际图标的占位符
def _createFrameInfo(self):
self.frameInfo = Frame(self.mainframe)
labelTemp = Label(self.frameInfo, textvariable=self.varTemp)
labelLocation = Label(self.frameInfo, textvariable=self.varLocation)
labelIcon = Label(self.frameInfo, text = 'image')
labelTemp.pack(pady = 5)
labelLocation.pack(pady = 5)
labelIcon.pack(pady = 5)
self.frameInfo.pack()
这是weather.py中的一部分代码:
# 这里的pass是为了使应用程序在没有错误的情况下运行。
def getConditionIcon(self):
pass
这是所有代码的GitHub链接:https://github.com/EasyCanadianGamer/Python-Weather-App
我已经检查了文档,但没有清晰的解释如何获取图标URL并进行更新。这是Weatherapi的文档链接:https://www.weatherapi.com/docs/
英文:
I am trying to make a weather app with Python and Tkinter. I am using the weather api from weatherapi.com. I have pretty much everything but the icon, I don't know how to get the icon url from the .json file and update the icon when searching at a different city or place.
here is the image of the json file where the current condition icon is:
Here is the createFrameInfo code in the view.py:
#the information of the current condition the text that says "image" is a place holder for the actual icon
def _createFrameInfo(self):
self.frameInfo = Frame(self.mainframe)
labelTemp = Label(self.frameInfo, textvariable=self.varTemp)
labelLocation = Label(self.frameInfo, textvariable= self.varLocation)
labelIcon = Label(self.frameInfo, text = 'image')
labelTemp.pack(pady = 5)
labelLocation.pack(pady = 5)
labelIcon.pack(pady = 5)
self.frameInfo.pack()
Here is a bit of code from weather.py
# The pass is there so the app can run without having an error.
def getConditionIcon(self):
pass
Here is the github of the all the codes: https://github.com/EasyCanadianGamer/Python-Weather-App
I checked the docs and yet there was not a clear explanation of how to get the icon url and updating it. Here is the Weatherapi docs: https://www.weatherapi.com/docs/
答案1
得分: 1
你可以像获取condition text一样获取图标的URL,并使用 requests.get()
来获取图标数据:
def getConditionIcon(self):
condition = self.getCurrentData("condition")
icon_url = f"http:{condition['icon']}"
try:
icon_data = requests.get(icon_url).content
except Exception as ex:
print(ex)
icon_data = None
return icon_data
然后,你可以将图标数据传递给 tkinter.PhotoImage()
来创建一个图像对象:
weather = Weather(...) # 传递你想要的位置
image = tkinter.PhotoImage(data=weather.getConditionIcon())
请注意,如果图标图像不是PNG格式,你可能需要使用 Pillow
模块将图标数据转换为图像。
英文:
You can get the icon URL like how you get the condition text and use requests.get()
to get the icon data:
def getConditionIcon(self):
condition = self.getCurrentData("condition")
icon_url = f"http:{condition['icon']}"
try:
icon_data = requests.get(icon_url).content
except Exception as ex:
print(ex)
icon_data = None
return icon_data
Then you can pass the icon data to tkinter.PhotoImage()
to create an image object:
weather = Weather(...) # pass the location you want
image = tkinter.PhotoImage(data=weather.getConditionIcon())
Note that if the icon image is not PNG image, you may need to use Pillow
module to convert the icon data to image.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论