import tkinter as tk
from tkinter import messagebox
import requests
import xml.etree.ElementTree as ET

def get_weather(city_name):
    """调用免费公开天气接口，无需key"""
    url = f"http://wthrcdn.etouch.cn/WeatherApi?city={city_name}"
    try:
        resp = requests.get(url, timeout=8)
        resp.encoding = "utf-8"
        xml_data = resp.text
        root = ET.fromstring(xml_data)

        # 解析基础信息
        city = root.findtext("city")
        temp_now = root.findtext("wendu")  # 当前温度
        humidity = root.findtext("shidu")  # 湿度
        wind = root.findtext("fengli")    # 风力
        wind_dir = root.findtext("fengxiang") # 风向
        weather_now = root.findtext("forecast/weather[0]/day_type") # 今日天气

        # 未来5天预报
        forecast_list = []
        for i in range(5):
            day_node = root.find(f"forecast/weather[{i+1}]")
            date = day_node.findtext("date")
            high = day_node.findtext("high")
            low = day_node.findtext("low")
            cond = day_node.findtext("day_type")
            forecast_list.append(f"{date} | {cond} | {low} ~ {high}")

        # 生活提示
        tips = root.findtext("zhishu[0]/tips")
        tip_text = f"生活建议：{tips}" if tips else "暂无生活提示"

        info = f"""【{city} 实时天气】
当前温度：{temp_now} ℃
天气状况：{weather_now}
空气湿度：{humidity}
风向风力：{wind_dir} {wind}

————未来5天预报————
"""
        for item in forecast_list:
            info += item + "\n"
        info += "\n" + tip_text
        return info

    except Exception as e:
        return f"查询失败！\n原因：{str(e)}\n请检查城市名称或网络"

def query_btn():
    city = entry_city.get().strip()
    if not city:
        messagebox.showwarning("提示", "请输入城市名称（如：北京、上海、盐城）")
        return
    result = get_weather(city)
    text_result.delete(1.0, tk.END)
    text_result.insert(tk.END, result)

def clear_btn():
    entry_city.delete(0, tk.END)
    text_result.delete(1.0, tk.END)

# 构建GUI窗口
win = tk.Tk()
win.title("简易天气查询工具")
win.geometry("520x420")
win.resizable(False, False)

# 输入行
frame_top = tk.Frame(win, pady=12)
frame_top.pack()

tk.Label(frame_top, text="输入城市：", font=("微软雅黑",11)).grid(row=0, column=0)
entry_city = tk.Entry(frame_top, width=22, font=("微软雅黑",11))
entry_city.grid(row=0, column=1, padx=6)

tk.Button(frame_top, text="查询天气", command=query_btn, font=("微软雅黑",10)).grid(row=0, column=2, padx=4)
tk.Button(frame_top, text="清空", command=clear_btn, font=("微软雅黑",10)).grid(row=0, column=3, padx=2)

# 结果显示文本框
text_result = tk.Text(win, width=62, height=18, font=("微软雅黑",10))
text_result.pack(padx=10)

win.mainloop()