抖音群进群密码 : 114514 Pyisland是一个基于PySide6开发的现代化灵动岛控制中心,提供直观的系统亮度控制、系统状态监控以及系统托盘功能。
- 灵动岛设计:采用现代胶囊形状设计,初始状态显示时间,点击展开显示控制选项
- 亮度调节:通过滑动条调节系统亮度,支持防抖机制,避免频繁调节
- 系统状态监控:显示当前WiFi连接、蓝牙设备和电池状态
- 系统托盘:支持最小化到系统托盘,后台运行
- 设置窗口:通过托盘菜单打开设置窗口
- URL检测:自动检测剪贴板中的URL并提供打开选项
- 鼠标拖动:支持鼠标拖动调整灵动岛位置
- 自动收缩:展开后失去焦点自动收缩
- 实时时间显示:初始状态显示当前系统时间
本项目采用模块化架构设计,遵循单一职责原则,将复杂功能拆分为独立的管理器模块,实现高内聚低耦合。
┌─────────────────────────────────────────────────────────────┐
│ ModernIsland (主类) │
│ 349 行代码 │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────┼─────────────────────┐
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│StateManager │ │TimerManager │ │ServiceCoord │
│ 状态管理器 │ │ 定时器管理器 │ │ 服务协调器 │
│ 111 行 │ │ 127 行 │ │ 153 行 │
└──────────────┘ └──────────────┘ └──────────────┘
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│UIBuilder │ │AnimationCtrl │ │EventHandler │
│ UI构建器 │ │ 动画控制器 │ │ 事件处理器 │
│ 135 行 │ │ 170 行 │ │ 94 行 │
└──────────────┘ └──────────────┘ └──────────────┘
│
▼
┌──────────────┐
│TimeDisplayMgr│
│ 时间显示管理器 │
│ 97 行 │
└──────────────┘
- 单一职责原则 (SRP):每个模块只负责一个核心功能
- 开闭原则 (OCP):对扩展开放,对修改关闭
- 依赖倒置原则 (DIP):高层模块不依赖低层模块,两者都依赖抽象
- 接口隔离原则 (ISP):使用多个专门的接口,而不是单一的总接口
PyislandWeb/
├── app/
│ ├── __init__.py # 包初始化
│ ├── island.py # 主窗口 (349行,重构前746行)
│ ├── utils.py # 工具函数(向后兼容)
│ ├── core/ # 核心功能模块
│ │ ├── __init__.py
│ │ ├── worker.py # 后台工作线程
│ │ ├── config.py # 配置常量
│ │ ├── icons.py # 图标枚举类
│ │ ├── state_manager.py # 状态管理器 ⭐ 新增
│ │ ├── timer_manager.py # 定时器管理器 ⭐ 新增
│ │ ├── ui_builder.py # UI构建器 ⭐ 新增
│ │ ├── service_coordinator.py # 服务协调器 ⭐ 新增
│ │ ├── animation_controller.py # 动画控制器 ⭐ 新增
│ │ ├── event_handler.py # 事件处理器 ⭐ 新增
│ │ └── time_display_manager.py # 时间显示管理器 ⭐ 新增
│ ├── ui/ # UI组件模块
│ │ ├── __init__.py
│ │ ├── controls.py # 控制面板组件
│ │ ├── status_bar.py # 状态栏组件
│ │ ├── url_dialog.py # URL检测对话框
│ │ └── settings.py # 设置窗口
│ ├── services/ # 服务模块
│ │ ├── __init__.py
│ │ ├── clipboard.py # 剪贴板服务
│ │ ├── system_status.py # 系统状态服务
│ │ ├── brightness.py # 亮度控制服务
│ │ └── tray.py # 托盘服务
│ └── animations/ # 动画效果模块
│ ├── __init__.py
│ └── effects.py # 展开/收起动画
├── resources/
│ ├── icons/ # 图标资源
│ │ ├── controls/ # 控制相关图标
│ │ │ ├── light.png # 亮度图标
│ │ │ ├── volume.png # 音量图标
│ │ │ └── tray.png # 托盘图标
│ │ └── system/ # 系统状态图标
│ │ ├── battery.png # 电池图标
│ │ ├── bluetooth.png # 蓝牙图标
│ │ └── internet.png # 网络图标
│ └── styles/
│ └── style.qss # QSS样式文件
├── main.py # 应用入口
└── README.md # 项目说明文档
# 安装PySide6
pip install PySide6
# 安装其他依赖(如果需要)
pip install comtypes # 用于音量控制的COM接口
pip install screen_brightness_control # 用于亮度控制python main.py- 单击托盘图标:打开设置窗口
- 双击托盘图标:打开设置窗口
- 右键托盘图标:显示菜单
- 设置:打开设置窗口
- 退出:退出应用
- 点击灵动岛:展开/收起控制面板
- 拖动灵动岛:调整位置
- 亮度滑块:调节系统亮度
修改 resources/styles/style.qss 文件可以调整界面样式:
- 灵动岛主体:修改
#IslandContainer样式 - 时间显示:修改
#TimeLabel样式 - 滑动条:修改
QSlider#CapsuleSlider相关样式 - 状态栏:修改
#StatusLabel样式
在 app/core/config.py 文件中修改:
DEBOUNCE_DELAY = 180 # 防抖时间,单位毫秒在 app/core/config.py 文件中修改:
STATUS_UPDATE_INTERVAL = 5000 # 更新频率,单位毫秒- 在
app/services/目录下创建新的服务类 - 在
app/ui/目录下创建新的UI组件 - 在
app/core/config.py中添加配置常量 - 在
app/island.py中整合新模块 - 在
resources/styles/style.qss中添加相应的样式
将自定义图标替换到 resources/icons/ 目录下,确保文件名与代码中的引用一致:
- 亮度图标:
controls/light.png - 音量图标:
controls/volume.png - 托盘图标:
controls/tray.png - 电池图标:
system/battery.png - 蓝牙图标:
system/bluetooth.png - 网络图标:
system/internet.png
图标通过 IslandIcon 枚举类统一管理,参考 qfluentwidgets 的 FluentIcon 实现方式。使用示例:
from app.core.icons import IslandIcon
# 获取图标路径
icon_path = IslandIcon.LIGHT.path()
# 获取 QIcon 对象
qicon = IslandIcon.TRAY.qicon()| 模块 | 说明 | 行数 |
|---|---|---|
worker.py |
后台工作线程,执行耗时操作 | - |
config.py |
配置常量,包括尺寸、时间间隔等 | - |
icons.py |
图标枚举类,参考FluentIcon实现,管理所有图标路径 | - |
state_manager.py ⭐ |
状态管理器:管理灵动岛的5种状态及其转换逻辑 | 111 |
timer_manager.py ⭐ |
定时器管理器:统一管理所有定时器的创建、启动、停止 | 127 |
ui_builder.py ⭐ |
UI构建器:负责UI组件的构建和初始化 | 135 |
service_coordinator.py ⭐ |
服务协调器:协调亮度、剪贴板、系统状态服务 | 153 |
animation_controller.py ⭐ |
动画控制器:协调所有动画,包括展开、收起、悬停等 | 170 |
event_handler.py ⭐ |
事件处理器:处理鼠标拖动、点击和焦点变化事件 | 94 |
time_display_manager.py ⭐ |
时间显示管理器:管理不同状态下的时间显示 | 97 |
| 模块 | 说明 |
|---|---|
controls.py |
控制面板组件,亮度/音量滑块 |
status_bar.py |
状态栏组件,WiFi/蓝牙/电池状态 |
url_dialog.py |
URL检测对话框,处理剪贴板URL |
settings.py |
设置窗口,应用配置界面 |
| 模块 | 说明 |
|---|---|
clipboard.py |
剪贴板服务,URL检测和打开 |
system_status.py |
系统状态服务,WiFi/蓝牙/电池信息 |
brightness.py |
亮度控制服务,获取和设置系统亮度 |
tray.py |
托盘服务,系统托盘图标和菜单 |
| 模块 | 说明 |
|---|---|
effects.py |
动画效果,展开/收起动画、圆角遮罩 |
| 指标 | 重构前 | 重构后 | 改进 |
|---|---|---|---|
| island.py 行数 | 746行 | 349行 | 减少53% ⬇️ |
| 模块数量 | 1个主文件 | 7个专业模块 | 职责更清晰 ✅ |
| 代码复杂度 | 高 | 低 | 易于维护 ✅ |
| 可测试性 | 低 | 高 | 模块独立测试 ✅ |
- 单一职责:每个模块只负责一个核心功能
- 高内聚低耦合:模块间依赖清晰,易于测试
- 可维护性强:修改某个功能只需关注对应模块
- 可扩展性好:新增功能时更容易扩展
- 代码复用:工具方法可在多处使用
# 状态管理
from app.core.state_manager import IslandStateManager, IslandState
state_manager = IslandStateManager()
state_manager.set_state(IslandState.EXPANDED)
is_expanded = state_manager.is_expanded()
# 定时器管理
from app.core.timer_manager import TimerManager
timer_manager = TimerManager()
timer_manager.create_timer("update", 1000, callback)
timer_manager.stop_timer("update")
# 服务协调
from app.core.service_coordinator import ServiceCoordinator
coordinator = ServiceCoordinator()
coordinator.load_initial_brightness(callback)
wifi_msg, bt_msg = coordinator.check_status_changes(...)
# 动画控制
from app.core.animation_controller import AnimationController
animation_ctrl = AnimationController(
animation_manager, container, controls,
update_mask_callback, update_time_callback
)
animation_ctrl.animate_expand(...)
# 事件处理
from app.core.event_handler import EventHandler
event_handler = EventHandler(toggle_callback, is_expanded_callback)
event_handler.handle_mouse_press(event, get_window_pos)
# 时间显示
from app.core.time_display_manager import TimeDisplayManager
time_manager = TimeDisplayManager(time_label, date_label, position_callback)
time_manager.update(is_expanded=True, is_hovering=False)- Python 3.7+
- PySide6:Qt的Python绑定,用于GUI开发
- QSS (Qt Style Sheets):用于界面样式定制
- Windows API:通过PowerShell和ctypes调用系统功能
- 系统兼容性:目前仅支持Windows系统,因为使用了Windows特定的API调用
- 权限要求:可能需要管理员权限才能修改系统亮度
- 图标路径:确保
resources/icons/目录存在且包含所需图标 - PowerShell:需要系统安装PowerShell以获取系统状态信息
-
ModuleNotFoundError: No module named 'PySide6'- 原因:未安装PySide6
- 解决方案:
pip install PySide6
-
ModuleNotFoundError: No module named 'app'- 原因:直接运行了子模块文件
- 解决方案:通过
python main.py运行应用
-
托盘图标不显示
- 原因:图标文件路径错误
- 解决方案:确保
resources/icons/controls/tray.png存在
- 查看控制台输出获取详细错误信息
- 检查PowerShell命令是否能在系统中正常执行
- 确保图标文件路径正确
- 主包帅吗? 帅的话回答:主包太帅了 不帅的话别进来了
欢迎提交问题和改进建议!如果您想为项目贡献代码,请:
- Fork项目仓库
- 创建功能分支
- 提交更改
- 推送到分支
- 打开Pull Request
本项目采用MIT许可证。
希望这个项目能为您提供一个现代化、直观的系统控制界面!如有任何问题,欢迎提出。