如何实现带有单个输入框的简易Tkinter GUI应用?——天气查询程序添加CITY输入框问题求助
给天气查询程序添加城市输入功能
嘿,我帮你搞定这个输入框的问题了!原来的代码里CITY是固定值,而且程序启动就直接查询了,没法获取用户输入。我修改了代码,加入了输入框和查询按钮,现在用户可以自己输入城市名称来查询天气了。
修改后的完整代码:
from tkinter import * import requests, json import random window = Tk() window.title("Weather") window.geometry('350x250') # 稍微放大窗口,容纳输入区域 # 添加输入区域的标签和输入框 Label(window, text="输入城市名称(英文):").grid(column=0, row=0, padx=5, pady=5) city_entry = Entry(window, width=20) city_entry.grid(column=1, row=0, padx=5, pady=5) city_entry.insert(0, "London") # 设置默认值方便测试 def start(): # 获取输入框中的城市名称,去除前后空格 CITY = city_entry.get().strip() if not CITY: # 空输入提示 Label(window, text="请输入城市名称!", foreground='red').grid(column=0, row=1, columnspan=2) return BASE_URL = "https://api.openweathermap.org/data/2.5/weather?" API_KEY = "xxxxxxx" # 记得替换成你自己的API密钥 URL = BASE_URL + "q=" + CITY + "&appid=" + API_KEY response = requests.get(URL) if response.status_code == 200: data = response.json() main = data['main'] temperature = main['temp'] humidity = main['humidity'] pressure = main['pressure'] report = data['weather'] temperature = round(temperature - 273.15) # 清空之前的查询结果,避免内容重叠 for widget in window.grid_slaves(): if int(widget.grid_info()["row"]) >= 1: widget.destroy() # 显示新的查询结果 Label(window, foreground='blue',text=f"{CITY:-^30}").grid(column=0, row=1, columnspan=2) Label(window, text=f"Temperature: {temperature}°C").grid(column=0, row=2, columnspan=2) Label(window, text=f"Humidity: {humidity}%").grid(column=0, row=3, columnspan=2) Label(window, text=f"Pressure: {pressure} hPa").grid(column=0, row=4, columnspan=2) Label(window, text=f"Weather Report: {report[0]['description']}").grid(column=0, row=5, columnspan=2) else: # 在窗口内显示错误提示,更直观 Label(window, text=f"查询失败:城市不存在或API错误", foreground='red').grid(column=0, row=1, columnspan=2) # 添加查询按钮,点击触发查询逻辑 Button(window, text="查询天气", command=start).grid(column=2, row=0, padx=5, pady=5) window.mainloop()
关键修改说明:
- 新增了
Entry输入框组件,用来接收用户输入的城市名称,还设置了默认值方便快速测试 - 添加了查询按钮,将
start()函数绑定到按钮的点击事件上,让用户可以自主选择查询时机 - 在
start()函数中,通过city_entry.get()获取输入框内容,同时增加了空输入判断,避免无效请求 - 调整了窗口大小和组件布局,让界面更协调;每次查询前会清空旧结果,避免内容重叠
- 把错误提示从控制台输出改成窗口内显示,用户体验更好
使用时记得把API_KEY换成你自己在OpenWeatherMap上申请的密钥,输入城市名称要用英文格式(比如Beijing、New York)。
内容的提问来源于stack exchange,提问作者coderguy6000
相关产品推荐
相关产品推荐

