[AI Development Lab] 【deepin插件开发活动】天气桌面小工具 — 多城市同屏天气插件
Tofloor
poster avatar
晚秋(lateautumn)
Moderator
2026-09-03 19:48
Author

🌤️ 天气桌面小工具 — 多城市同屏天气桌面插件

一款支持多城市同屏显示、可自定义的桌面天气小工具,专为 Deepin/UOS 桌面环境设计。
基于 Python + Tkinter 构建,2071 行代码,6 个模块化组件。


📦 源码仓库

[GitHub 仓库链接 - 上传后替换]
(运行 python3 push_to_github.py 自动上传)


✨ 功能特性

特性 说明
🏙️多城市同屏 同时展示多个城市的实时天气,支持搜索/添加/删除/排序
📅3天预报 每个城市展示未来3天天气趋势(温度、天气描述)
🔍城市搜索 支持拼音/汉字实时搜索过滤,129个常用城市一键添加
📦数据缓存 10分钟缓存 + 断网自动显示旧数据 + 提示用户
🔄自动重试 网络请求失败自动指数退避重试,确保数据可靠性
🌙深色主题 现代化深色 UI,护眼舒适,与 Deepin 完美融合
🎨自定义背景 支持本地图片作为背景,自动压暗+模糊处理
🖱️拖拽移动 自由拖动窗口,位置自动保存记忆
⌨️快捷键 F5 刷新、Esc 最小化
💾配置持久化 城市列表、背景图片、窗口位置全部自动保存

🚀 安装方式

# 方式1:直接运行
python3 src/main.py

# 方式2:一键安装(桌面快捷方式 + 开机自启)
./setup.sh

# 卸载
./setup.sh uninstall

🖼️ 效果截图

运行效果截图.png

效果图_最终版.png

效果图_五城同屏.jpg

效果图_带背景.png


🧩 项目结构

weather-widget/
├── src/
│   ├── main.py              # 入口文件(100行)
│   ├── weather_api.py       # 天气数据获取+缓存+重试(300行)
│   ├── weather_ui.py        # 桌面窗口UI渲染(846行)
│   ├── settings_dialog.py   # 城市搜索/添加/删除/排序(653行)
│   ├── config_manager.py    # 配置持久化管理(150行)
│   └── __init__.py          # 包定义
├── assets/                  # 应用图标
├── screenshots/             # 效果截图
├── README.md                # 完整项目文档
├── setup.sh                 # 一键安装/卸载脚本
└── 天气桌面小工具_作品集.docx # 作品集文档

🏗️ 技术架构

技术 用途
Python 3.8+ / Tkinter GUI 桌面界面
wttr.in API 免费天气数据源(无需 API Key)
多线程并发 同时获取多城市天气数据
Pillow 背景图片缩放、亮度调节、模糊处理
指数退避重试 网络请求失败自动重试
JSON 配置 城市列表、背景路径、窗口位置持久化

架构模式:MVC 三层架构

  • 数据层(Model):weather_api.py — 数据获取、缓存、重试
  • 视图层(View):weather_ui.py — 窗口渲染、卡片布局
  • 控制层(Controller):settings_dialog.py + config_manager.py — 城市管理、配置持久化

💬 开发过程说明(基于 deepin Skills)

本作品全程通过 UOS AI(小U同学) 辅助开发,核心使用了以下 deepin Skills:

  1. data-analysis — 天气数据处理、图表渲染逻辑
  2. dtk-development — 桌面应用架构设计指导

开发历程:

  1. 需求分析:与 AI 讨论多城市天气插件的功能需求,确定技术栈(Python + Tkinter)
  2. 架构设计:AI 建议采用 MVC 模块化架构,分离数据层、视图层、控制层
  3. 核心开发:
    • AI 编写天气数据获取模块(weather_api.py),含多线程并发、缓存、重试机制
    • AI 编写 UI 渲染模块(weather_ui.py),含圆角卡片、图文混排、悬停效果
    • AI 编写城市管理对话框(settings_dialog.py),含搜索过滤、排序功能
  4. 问题修复:AI 协助修复了城市名校验误报、窗口位置记忆、断网保护等 bug
  5. 优化迭代:AI 协助优化了代码结构、添加注释、完善文档
  6. 作品包装:AI 协助生成作品集文档、README、安装脚本

AI 对话记录截图:(见下方附件)


📋 更新日志 v2.0.0

  • ✨ 重构模块化 MVC 架构,代码清晰可维护
  • 🔍 新增城市搜索功能(129个常用城市,拼音/汉字过滤)
  • 📦 新增数据缓存与断网保护
  • 🔄 新增网络请求自动重试(指数退避)
  • 📊 新增 UV 指数、能见度展示
  • ⌨️ 新增快捷键 F5/Esc
  • 🗑️ 新增卸载支持(setup.sh uninstall)
  • 🐛 修复城市名校验误报、启动路径兼容性
  • 🎨 新增应用图标 + 背景模糊效果

🔗 相关链接

  • deepin Skills 项目:https://github.com/linuxdeepin/deepin-skills
  • 天气数据源:https://wttr.in
  • 活动帖子:https://bbs.deepin.org.cn/post/300665

===============================================================================

天气桌面小工具_v2.0.0_提交版.zip

Reply Favorite View the author
All Replies
avatar
一头牛
deepin product team
2026-09-03 20:01
#1

厉害呀

Reply View the author
avatar
骑🐖追帅哥bot
Moderator
2026-09-03 20:28
#2

哇 成功了!

Reply View the author
avatar
晚秋(lateautumn)
Moderator
2026-09-04 09:34
#3
骑🐖追帅哥bot:

哇 成功了!

哈哈,昨天又让小U调试了2个小时。applaud但是上传至github都是不成功。那个网站登录太慢了

Reply View the author
avatar
晚秋(lateautumn)
Moderator
2026-09-07 15:08
#4

===============================================================================
🌤️ 天气桌面小工具 — 帖子更新回复文案
复制以下内容回复到 deepin论坛原帖,补充 GitHub 仓库与评审改进说明

📢 更新:作品已开源发布 + 完成评审建议优化

感谢各位评审老师的反馈!已按建议完成全部优化,并将作品开源发布:


📦 开源仓库

🔗 GitHub 公开仓库:https://github.com/late-autumn414/weather-widget

  • 协议:MIT License(已添加 LICENSE 文件)
  • 完整源码 + 作品集文档 + 效果截图均已上传
  • 支持一键克隆、Fork、Issue 反馈

✅ 评审建议落实情况

# 评审建议 落实情况
1 补充明确开源协议与 LICENSE 文件 ✅ 已添加 MIT LICENSE,README /init.py 声明统一
2 dulwich 加入依赖并锁定 Pillow 版本 ✅ requirements.txt 已锁定 Pillow==11.1.0、dulwich==1.2.14
3 发布 GitHub 公开仓库 + 可复现构建说明 ✅ 仓库已公开,README 新增完整可复现构建步骤
4 Token 改用环境变量/密钥环存储 ✅ push_to_github.py 已重写,支持 GITHUB_TOKEN 环境变量,杜绝明文落盘

🔧 可复现构建(供评审验证)

# 克隆仓库
git clone https://github.com/late-autumn414/weather-widget.git
cd weather-widget

# 创建虚拟环境(推荐)
python3 -m venv .venv
source .venv/bin/activate

# 安装锁定依赖
pip install -r requirements.txt

# 语法检查
python3 -m py_compile src/*.py

# 启动应用
python3 src/main.py

依赖版本已全部锁定(==),任意 Linux 环境均可复现构建。


🛠️ 本次更新亮点

  • 🧩 模块化 MVC 架构:数据层 / 视图层 / 控制层完全解耦
  • 🔄 多线程并发:多城市同时加载,响应更快
  • 🛡️ 三重容错:自动重试 + 数据缓存 + 断网保护
  • 🔒 安全加固:Token 环境变量存储,不再明文落盘
  • 📖 文档完善:README 可复现构建指南 + 作品集文档

再次感谢评审与大家的支持!后续会持续迭代,欢迎 Star ⭐ 和提 Issue!

Reply View the author
avatar
181******22
deepin
2026-09-29 10:19
#5

@晚秋(lateautumn) https://gitee.com/vghxug/weather-widget

Reply View the author
avatar
181******22
deepin
2026-09-29 10:19
#6
181******22:

@晚秋(lateautumn) https://gitee.com/vghxug/weather-widget

@晚秋(lateautumn)新增deb打包

Reply View the author
avatar
晚秋(lateautumn)
Moderator
2026-09-29 10:23
#7
181******22:

@晚秋(lateautumn)新增deb打包

收到,谢谢。

Reply View the author
avatar
晚秋(lateautumn)
Moderator
2026-09-29 11:04
#8
181******22:

@晚秋(lateautumn) https://gitee.com/vghxug/weather-widget

weather-widget_1.0.0_loong64以及amd.zip

用workbuddy打了个龙包与amd包。但感觉还是有很多需要改进的地方。

image.png

Reply View the author
avatar
181******22
deepin
2026-09-29 15:48
#9

@晚秋(lateautumn) https://github.com/late-autumn414/weather-widget/pull/1/

你的问题已经解决了。

Reply View the author
avatar
晚秋(lateautumn)
Moderator
2026-09-29 17:07
#10
181******22:

@晚秋(lateautumn) https://github.com/late-autumn414/weather-widget/pull/1/

你的问题已经解决了。

什么问题?我又改了一版。能够实时看到想看到的数据。
image.png

Reply View the author
avatar
晚秋(lateautumn)
Moderator
2026-09-30 12:09
#11
181******22:

@晚秋(lateautumn) https://github.com/late-autumn414/weather-widget/pull/1/

你的问题已经解决了。

image.png改进了一下,可以直接显示在任务栏内,双击任务栏图标,弹出窗口。可以随意添加自己需要的城市。

image.png

Reply View the author
avatar
181******22
deepin
2026-10-02 12:15
#12
晚秋(lateautumn):

image.png改进了一下,可以直接显示在任务栏内,双击任务栏图标,弹出窗口。可以随意添加自己需要的城市。

image.png

放到GitHub仓库内。

Reply View the author
avatar
晚秋(lateautumn)
Moderator
2026-10-02 18:53
#13
181******22:

放到GitHub仓库内。

是想把两个deb包发到github仓库,但琢磨了半天没搞明白如何上传。

Reply View the author