鱼C论坛

 找回密码
 立即注册
查看: 32|回复: 1

[作品展示] 天气查询3.0

[复制链接]
发表于 2026-9-4 14:02:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

游客,如果您要查看本帖隐藏内容请回复


ai过于强大

评分

参与人数 2荣誉 +7 鱼币 +7 贡献 +6 收起 理由
cjjJasonchen + 5 + 5 + 3
~风介~ + 2 + 2 + 3 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2026-9-4 14:06:15 | 显示全部楼层
首先给鱼油点个赞!3.0 版本整体思路清晰,比 2.0 的“小黑框”已经进步不少。不过界面确实还能再打磨,而且代码里有几个容易踩坑的地方。

需要指出几个问题:

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


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


  1. import tkinter as tk
  2. from tkinter import messagebox, scrolledtext
  3. from pypinyin import lazy_pinyin
  4. from re import findall
  5. from requests import get


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

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

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

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

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

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

  34.     result = (
  35.         f"城市:{city}\n"
  36.         f"地址:{url}\n\n"
  37.         f"日期:{get_one(rq)}\n"
  38.         f"湿度:{get_one(sd)}\n"
  39.         f"风向:{get_one(fx)}\n"
  40.         f"紫外线:{get_one(zwx)}\n"
  41.         f"PM:{get_one(pm)}\n"
  42.     )

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


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

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

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

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

  59. root.mainloop()
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-9-18 19:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表