一、背景介绍
随着Web开发的普及,用户对城市天气的需求日益增长。本项目旨在构建一个简单但功能强大的网页应用,通过用户输入城市名称,自动返回该城市当前天气预报数据。该系统采用Python开发,结合Tkinter GUI进行用户交互设计,实现了网络请求与数据处理的核心功能。
二、思路分析
1. 项目需求分解
- 输入处理:通过输入框获取城市名称
- 数据获取:使用requests库调用OpenWeatherMap API获取天气数据
- 数据解析:将返回的JSON数据解析为温度和降水概率
- 交互展示:使用Tkinter创建GUI窗口显示结果
2. 实现步骤
1. 构建天气数据
- 创建包含温度和降水概率的JSON对象(示例数据)
- 将JSON数据存储为本地文件
- 示例数据:{“temperature”: “22°C”, “precipitation”: “50%”}
2. 实现网络请求
- 使用requests库发送GET请求到天气API
- 设置参数城市名称和单位(°C)
3. 实现文件读写
- 使用with语句读取JSON文件
- 解析JSON数据并存储到变量
4. 实现GUI交互
- 创建Tkinter窗口
- 添加输入框和按钮
- 实现点击事件处理函数
三、代码实现
from tkinter import *
import requests
# 示例天气数据
weather_data = {
"temperature": 22,
"precipitation": 50
}
# 读取JSON文件
with open('weather.json', 'r') as f:
weather_data = json.load(f)
# 创建Tkinter窗口
def main():
app = Tk()
app.title('City Weather App')
# 输入框
city_input = Entry(app, width=20, font=('Arial', 14))
city_input.pack(pady=10)
# 获取天气按钮
def get_weather():
response = requests.get(f"https://api.weatherapi.com/data/forecast?city={city_input.get()}")
data = response.json()
temperature = f"{data['main']['temp']}°C"
precipitation = f"{data['data']['main']['humidity']}%"
result_label = Label(app, text=f"{temperature}°C {precipitation}%", font=('Arial', 14))
result_label.pack(pady=10)
button = Button(app, text="获取天气", command=get_weather)
button.pack(pady=10)
app.mainloop()
if __name__ == "__main__":
main()
四、总结
本项目通过Python实现了一个网页天气预报应用,成功将数据从本地文件读取、网络请求、JSON解析和Tkinter GUI交互整合到一个完整的前端界面中。该实现符合Web开发基础功能的要求,具备良好的可扩展性和可运行性。通过此项目,学习到了文件读写、网络请求和GUI交互的核心技能,为后续开发复杂系统打下了基础。