需求:
通过python图形化程序需要实现空调风机的时长统计。

界面功能介绍:

- 该空调系统分为8页,通过右上角左右翻页的方式进行页面切换,翻页按钮是翻到最后一页后只能通过上一页往前面,同理第一页也是这样。
- 做了颜色采样,采样而且每页的风机数量是不同的,灰色:#515151 RGB :81 81 81 绿色:#1bf928 RGB:27 249 40 底色:#033047 RGB:3 48 71 灰色是未开机状态、绿色是开机状态、底色是该坐标点没有风机,通过坐标点颜色可以进行判断
- 每个风机的坐标已列出,该坐标点为最多容纳的情况,但是每页的风机数量不一样,优先排满横排再排竖排,比如第三页是49个,则是有六行8列后,第七行还有一个
实现原理:
- 通过轮巡的方式每5分钟进行截屏,以坐标点颜色判断来统计该风机的时长,比如该风机是灰色、下次截图是绿色,就以此时间点为开始,直到下次截图后发现该坐标点从绿转为灰色,统计此时长。
- 箭头坐标:(向左箭头:160,1760 向右箭头:160 1850 ) 过5分钟,从首页点击向右箭头,截取8次图片(通过图片计算风机运行时长),再过5分钟,触发向左箭头截取8次图片,以此为一轮回。
- 如果为底色(底色:#033047 RGB:3 48 71)则表示该位置上每月风机不进行统计。
要求:
- 程序具有简洁、美观的界面,代码可以通过pyinstaller打包成exe文件从而适合在win7系统上运行,方便部署。
- 能够通过1-8加x,y的方式给每个风机进行编号,比如1-1-4是第1页第1行第4个风机,通过日历表的时间选择能够统计出该风机的运行时长。
- 程序有功能按键能够选择每个风机、每页所有风机、全部风机对自定义日期和每月、每季度、每年的运行时长进行统计,点击每个功能按键能够在程序界面上显示风机统计时长,有excel导出功能,导出为标准的xlsx格式
- 该程序能够一直在后台运行,系统占用率低。
- 详细分析需求,列出测试好的程序源码。
⸻
✅ 功能需求总览
功能模块 |
实现方式说明 |
界面开发 |
PyQt5 图形化界面,主窗口+托盘图标+系统状态展示 |
风机状态识别 |
每页风机坐标颜色识别(绿色为开机,灰色为关机,底色跳过) |
自动翻页轮询 |
5分钟一次:从1页开始 -> 翻页8次 -> 再从8页回到1页 |
状态统计逻辑 |
识别状态变化(灰→绿→灰)计算持续时间 |
时间筛选统计 |
支持选中风机/页/全部按天、月、季度、年查询 |
编号格式 |
使用“页-行-列”格式,如 1-2-5 表示第1页第2行第5列 |
数据导出 |
统计结果导出为 xlsx 文件,支持选择导出路径 |
后台运行 |
最小化托盘,低占用运行,定时截图处理 |
实现逻辑拆解
1. 截图识别逻辑
- 使用
pyautogui.screenshot()
定时截图
- 每页截图一次后点右箭头坐标
(160, 1850)
,到第8页
- 再回退截图,点左箭头坐标
(160, 1760)
,回到第1页
- 每页获取风机数量,逐坐标检测颜色
- RGB ≈ (27, 249, 40) → 开机
- RGB ≈ (81, 81, 81) → 关机
- RGB ≈ (3, 48, 71) → 无风机,跳过
2. 数据结构与时间统计
fan_data = {
'1-1-1': [ (时间戳, 状态), ... ],
'3-6-8': [ ... ],
...
}
每次检测后追加状态记录,然后分析灰→绿→灰的时间差。
示例界面布局(PyQt5)
项目结构设计
fan_monitor/
├── main.py # 主程序入口
├── gui.py # PyQt5图形界面逻辑
├── monitor.py # 风机状态轮询模块
├── coords.py #