import tkinter as tk
from tkinter import ttk, messagebox
import requests

class WeatherQuery:
    def __init__(self, root):
        self.root = root
        self.root.title("简易天气查询工具")
        self.root.geometry("460x340")
        self.root.resizable(False, False)

        # 顶部输入区
        frame_top = ttk.LabelFrame(root, text="输入城市名称（如：北京、上海、盐城）")
        frame_top.pack(padx=12, pady=8, fill="x")

        self.city_var = tk.StringVar()
        self.city_entry = ttk.Entry(frame_top, textvariable=self.city_var, width=32, font=("微软雅黑",11))
        self.city_entry.grid(row=0, column=0, padx=5, pady=8)

        ttk.Button(frame_top, text="查询天气", command=self.get_weather).grid(row=0, column=1, padx=6)

        # 结果展示区域
        frame_res = ttk.LabelFrame(root, text="天气查询结果")
        frame_res.pack(padx=12, pady=5, fill="both", expand=True)

        self.result_text = tk.Text(frame_res, font=("微软雅黑",11), height=10)
        self.result_text.pack(padx=6, pady=6, fill="both")

        # 底部清空按钮
        ttk.Button(root, text="清空内容", command=self.clear_all).pack(pady=4)

    def get_weather(self):
        city = self.city_var.get().strip()
        if not city:
            messagebox.showwarning("提示", "请输入城市名称！")
            return
        try:
            # 免费和风天气简易接口
            url = f"https://geoapi.qweather.com/v2/city/lookup?location={city}"
            res_city = requests.get(url, timeout=8).json()
            if res_city.get("code") != "200":
                messagebox.showerror("错误", "找不到该城市，请检查名称！")
                return
            city_id = res_city["location"][0]["id"]

            # 获取实况天气
            weather_url = f"https://devapi.qweather.com/v7/weather/now?location={city_id}"
            weather_data = requests.get(weather_url, timeout=8).json()
            if weather_data.get("code") != "200":
                messagebox.showerror("错误", "天气数据获取失败")
                return

            now = weather_data["now"]
            loc_name = res_city["location"][0]["name"]
            info = f"📍查询城市：{loc_name}\n"
            info += f"🌤天气状况：{now['text']}\n"
            info += f"🌡实时温度：{now['temp']} ℃\n"
            info += f"💧体感温度：{now['feelsLike']} ℃\n"
            info += f"💦空气湿度：{now['humidity']} %\n"
            info += f"🌬风向风力：{now['windDir']} {now['windScale']}级\n"
            info += f"🌪风速：{now['windSpeed']} km/h\n"
            info += f"📅更新时间：{weather_data['updateTime']}"

            self.result_text.delete(1.0, tk.END)
            self.result_text.insert(tk.END, info)
        except requests.exceptions.Timeout:
            messagebox.showerror("网络错误", "请求超时，请检查网络！")
        except Exception as err:
            messagebox.showerror("异常", f"查询失败：{str(err)}")

    def clear_all(self):
        self.city_var.set("")
        self.result_text.delete(1.0, tk.END)

if __name__ == "__main__":
    root = tk.Tk()
    app = WeatherQuery(root)
    root.mainloop()