天气查询3.0
2.0界面很不好直接让ai帮忙修改
**** Hidden Message *****
ai过于强大 首先给鱼油点个赞!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]