和风API调用,使用tkinter模块输入地名返回气象数据
# GUI
root = Tk()
# 窗口标题
root.title("天气预报")
# 窗口大小控制
root.geometry("240x240")
# 搜索框
lbl = Label(root, text="输入要查询的城市")
lbl.place(relx=0.5, rely=0.3)
path = StringVar()
entry = tkinter.Entry(root, width=10, textvariable=path)
entry.place(relx=0.5, rely=0.3)
def getweather():
key = "157b033e994d4ed88008156dec18"
ID = getID(str(entry.get()), key)
weather = getdata(str(entry.get()), ID, key)
data_temp = weather['temp'] # 温度
data_feelsLike = weather["feelsLike"] # 体感温度
data_text = weather["text"] # 气象状况
data_wind360 = weather["wind360"] # 360°风向
data_windDir = weather["windDir"] # 风向
data_windScale = weather["windScale"] # 风级
data_windSpeed = weather["windSpeed"] # 风速
data_humidity = weather["humidity"] # 湿度
data_precip = weather["precip"] # 降水量
data_vis = weather["vis"] # 能见度
lbl.configure(
text="气温:{}\n "
"体感温度:{}\n "
"湿度:{}\n"
"天气情况:{}\n "
"360°风向:{}\n "
"风向:{}\n "
"风级:{}\n "
"风速{}\n "
"降水量:{}\n "
"能见度:{}\n"
.format(data_temp,
data_feelsLike,
data_humidity,
data_text,
data_wind360,
data_windDir,
data_windScale,
data_windSpeed,
data_precip,
data_vis))
button = tkinter.Button(root, text='点击查询', command=getweather())
root.mainloop()
报错情况
Traceback (most recent call last):
File "D:\pythonProject1\天气预报(API 和风).py", line 79, in <module>
button = tkinter.Button(root, text='点击查询', command=getweather())
File "D:\pythonProject1\天气预报(API 和风).py", line 44, in getweather
ID = getID(str(entry.get()), key)
File "D:\pythonProject1\天气预报(API 和风).py", line 13, in getID
for data in datas['location']:
KeyError: 'location'
去除GUI部分,使用input为正常运行,尝试通过StringVar变量赋值给label的textVariable参数未成功
在Entry中输入的地名可以传递到上面的函数中
ID = getID(str(entry.get()), key)
改成
ID = getID(path.get(), key)
# 输入提示和输入框
label = Label(root, bg='LightGreen', text='输入要查询的城市:', ).grid()
entry = Entry(root, bg='PaleTurquoise2')
entry.grid(row=0, column=1)
getID那个函数发一下,确定一下直接输入的和通过当前程序输入的是不是一样的