青出于蓝 发表于 2026-9-4 14:02:28

天气查询3.0

2.0界面很不好
直接让ai帮忙修改

**** Hidden Message *****

ai过于强大

FishC 发表于 2026-9-4 14:06:15

首先给鱼油点个赞!3.0 版本整体思路清晰,比 2.0 的“小黑框”已经进步不少。不过界面确实还能再打磨,而且代码里有几个容易踩坑的地方。

需要指出几个问题:


[*] tk.messagebox 的用法不对,正确写法是 from tkinter import messagebox。
[*] Toplevel 本身依赖一个主窗口(Tk),而你这里没有创建主窗口就直接调用,容易报错。
[*] 在子窗口里再次调用 mainloop() 会产生嵌套事件循环,可能导致界面卡死。
[*] easygui 和 tkinter 混搭,风格不统一,体验也比较“破碎”。


下面给你一个“3.1 单窗口版”,全部用 tkinter 实现,输入、查询、结果显示都在同一个窗口里,界面也友好得多:


import tkinter as tk
from tkinter import messagebox, scrolledtext
from pypinyin import lazy_pinyin
from re import findall
from requests import get


def chaxun():
    city = entry.get().strip()
    if not city:
      messagebox.showwarning("提示", "请输入城市名称")
      return

    # 城市名转拼音
    pinyin = "".join(lazy_pinyin(city))
    url = f"https://www.tianqi.com/{pinyin}/"

    headers = {
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                      "AppleWebKit/537.36 (KHTML, like Gecko)"
                      " Chrome/120.0 Safari/537.36"
    }

    try:
      resp = get(url, headers=headers, timeout=10)
      resp.raise_for_status()
      html = resp.text
    except Exception as e:
      messagebox.showerror("网络错误", f"访问失败:{str(e)}")
      return

    # 提取天气信息(正则按原逻辑保留)
    rq = findall(r"\d\d月\d\d日", html)
    sd = findall(r"湿度:\d\d%", html)
    fx = findall(r"风向:+ \d级", html)
    zwx = findall(r"紫外线:+", html)
    pm = findall(r"PM: \d\d", html)

    def get_one(lst):
      return "、".join(lst) if lst else "未获取"

    result = (
      f"城市:{city}\n"
      f"地址:{url}\n\n"
      f"日期:{get_one(rq)}\n"
      f"湿度:{get_one(sd)}\n"
      f"风向:{get_one(fx)}\n"
      f"紫外线:{get_one(zwx)}\n"
      f"PM:{get_one(pm)}\n"
    )

    txt.delete(1.0, tk.END)
    txt.insert(tk.END, result)


# 主窗口
root = tk.Tk()
root.title("天气查询 3.1")
root.geometry("450x350")

# 顶部输入区域
top = tk.Frame(root)
top.pack(pady=10)

tk.Label(top, text="城市:", font=("黑体", 12)).pack(side=tk.LEFT)
entry = tk.Entry(top, font=("黑体", 12), width=16)
entry.pack(side=tk.LEFT, padx=5)
tk.Button(top, text="查询", font=("黑体", 12), command=chaxun).pack(side=tk.LEFT)

# 中部结果显示框(带滚动条)
txt = scrolledtext.ScrolledText(root, font=("黑体", 12), wrap=tk.WORD)
txt.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)

root.mainloop()


这个版本去掉了 easygui,没有多余的弹窗,所有信息都在主窗口展示,操作也更连贯。试着运行看看,如果正则匹配的字段和网页不同,微调一下就行。3.0 已经很强了,继续保持!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 天气查询3.0