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

如何实现带有单个输入框的简易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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 17:37:38