yasb 磁盘小组件(Disk Widget)完整配置指南:容量监控、阈值着色、进度条与多磁盘弹窗

📅 发布时间:2026/10/12 1:51:59
yasb 磁盘小组件(Disk Widget)完整配置指南:容量监控、阈值着色、进度条与多磁盘弹窗
桌面应用【免费下载链接】yasbA highly configurable Windows status bar written in Python.项目地址https://gitcode.com/gh_mirrors/yas/yasb点击查看免费下载Disk Widget 是 yasb一款基于 Python 的高度可配置 Windows 状态栏内置的磁盘空间监控组件用于在任务栏实时展示本地驱动器剩余容量并通过阈值着色、环形/线性进度条直观反映使用率。本文以官方文档 docs/widgets/(Widget)-Disk.md-Disk.md) 为主体结合仓库源码disk.py、磁盘配置验证模型展开读完你将掌握如何接入该组件、逐项配置 label/进度条/多盘弹窗参数、编写阈值状态样式以及其底层数据采集与绘制原理。一、功能概览与源码结构Disk Widget 的能力远不止显示剩余空间容量统计通过 Windows APIwin32api.GetDiskFreeSpaceEx实时获取指定盘符的总空间、剩余空间与已用空间见 disk.py阈值着色根据磁盘使用率自动为标签附加status-low/status-medium/status-high/status-critical四档 CSS 类配合样式表实现绿→黄→橙→红的视觉告警进度条内置圆形circular、水平线性linear_horizontal、垂直线性linear_vertical三种形态支持渐变与平滑动画多磁盘弹窗点击后弹出无边框悬浮窗一次列出多个盘符的使用率、剩余/总容量与内嵌进度条并支持点击行直接打开对应盘符的资源管理器。从源码结构看组件遵循 yasb 统一的 widget 架构DiskWidget继承自 BaseWidget通过__init_subclass__自动注册进 registry.py 的全局注册表配置中以type: yasb.disk.DiskWidget引用其构造时以update_interval * 1000毫秒启动定时器配合callback_timer update_label实现周期性刷新。二、快速启用在config.yaml的widgets段注册disk组件widgets 列表的结构可参考 Configuration.mdwidgets: disk: type: yasb.disk.DiskWidget options: label: {volume_label} {space[used][percent]} label_alt: {volume_label} {space[used][gb]} / {space[total][gb]} volume_label: C update_interval: 60然后在bars.bar.widgets的 left/center/right 任意分组中引用bars: status-bar: widgets: left: [disk]适用前提yasb 是 Windows 专用状态栏Disk Widget 依赖win32apiGetDiskFreeSpaceEx / GetVolumeInformation非 Windows 平台无法运行。三、完整配置示例官方文档给出的完整示例此处原样保留并补充注释disk: type: yasb.disk.DiskWidget options: label: {volume_label} {space[used][percent]} label_alt: {volume_label} {space[used][gb]} / {space[total][gb]} volume_label: C update_interval: 60 group_label: volume_labels: [C, D, E, F] show_label_name: true blur: True round_corners: True round_corners_type: small border_color: System alignment: right direction: down callbacks: on_left: toggle_group # 左键点击弹出多磁盘监控窗口 on_middle: toggle_label # 中键在 label 与 label_alt 间切换 on_right: exec explorer C:\\ # 右键打开 C 盘资源管理器 disk_thresholds: low: 25 medium: 50 high: 90四、配置项详解官方选项表默认值以 磁盘配置验证模型 为准选项类型默认值说明labelstring{volume_label} {space[used][percent]}标签格式字符串label_altstring{volume_label} {space[used][gb]} / {space[total][gb]}备用格式字符串中键切换class_namestring附加 CSS 类名用于独立定制样式volume_labelstringC在任务栏展示的盘符decimal_displayinteger1小数位数范围 0–3update_intervalinteger60刷新间隔秒范围 0–3600group_labeldict见下多磁盘弹窗配置callbacksdicton_left: toggle_label鼠标事件回调disk_thresholdsdict{low: 25, medium: 50, high: 90}使用率阈值各 0–100progress_bardict见下进度条配置逐项说明label / label_alt格式化字符串支持下方标签格式变量中的占位符label_alt是备用文本默认通过中键toggle_label切换显示。源码中两类文本会被解析为独立的 QLabel 部件label/label alt见 base.py。class_name追加到disk-widget之后用于 CSS 中.disk-widget.your_class选择器。volume_label目标盘符大小写不敏感——源码中会统一upper()处理见 disk.py 与 disk.py。decimal_display控制所有容量数字与百分比的小数位数源码在_get_space中统一以:.{d}f格式化MB/GB/TB/percent见 disk.py。update_interval定时刷新周期。注意验证模型允许0ge0而BaseWidget.start_timer中timer_interval 0才会启动 QTimer但构造时始终会先执行一次_timer_callback完成首帧渲染见 base.py。disk_thresholds阈值字典low/medium/high分别取值 0–100控制四档状态类见第五节。group_label / callbacks / progress_bar见第七、八、九节。五、标签格式变量label与label_alt中可用的变量单位后缀 MB/GB/TB/% 由decimal_display决定小数位数变量说明示例输出{volume_label}盘符C{space[total][mb]}总空间MB953674.32MB{space[total][gb]}总空间GB931.51GB{space[total][tb]}总空间TB0.91TB{space[free][mb]}剩余空间MB476837.16MB{space[free][gb]}剩余空间GB465.66GB{space[free][tb]}剩余空间TB0.45TB{space[free][percent]}剩余空间占比50.0%{space[used][mb]}已用空间MB476837.16MB{space[used][gb]}已用空间GB465.85GB{space[used][tb]}已用空间TB0.45TB{space[used][percent]}已用空间占比50.0%源码层面所有值均由_get_space基于GetDiskFreeSpaceEx返回值换算used_bytes total_bytes - free_bytes、percent_used used/total*100、percent_free 100 - percent_used随后按decimal_display格式化成MB1,048,576 字节、GB1,073,741,824 字节、TB1,099,511,627,776 字节三种带单位字符串见 disk.py。如果盘符不可用如光驱无盘_get_space返回None标签将保留原始模板文本。六、磁盘阈值着色机制disk_thresholds决定四档状态类官方映射关系如下磁盘使用率追加的 CSS 类0% –lowstatus-lowlow–mediumstatus-mediummedium–highstatus-high高于highstatus-critical源码_get_disk_threshold实现disk.py为分段比较边界归属可精确表述为used% low→lowlow used% medium→mediummedium used% high→highused% high→critical阈值自身在 验证模型 中约束为 0–100 整数非法值会在配置校验阶段直接报错。状态类作用于.label元素_update_label在刷新时计算target_class f{label_class} status-{threshold}仅在类变化时调用refresh_widget_style重刷样式避免无谓重绘见 disk.py。一个实用的阈值配色方案官方示例绿/黄/橙/红.disk-widget .widget-container .label.status-low { color: #a6e3a1; /* Green */ } .disk-widget .widget-container .label.status-medium { color: #f9e2af; /* Yellow */ } .disk-widget .widget-container .label.status-high { color: #fab387; /* Orange */ } .disk-widget .widget-container .label.status-critical { color: #f38ba8; /* Red */ }七、进度条配置与底层实现progress_bar字典完整选项选项类型默认值说明enabledboolfalse是否启用进度条progress_typestringcircularcircular/linear_horizontal/linear_verticalpositionstringleft进度条相对标签的位置left或rightsizeinteger18长度圆形时为直径1–200thicknessinteger3粗细1–100radiusinteger0线性进度条圆角半径0–100colorstring/list#00C800单色或渐变色如#57948a或[#57948a, #ff0000]background_colorstring#3C3C3C进度条底色animationbooltrue数值变化是否平滑过渡启用示例disk: type: yasb.disk.DiskWidget options: label: {volume_label} {space[used][percent]} volume_label: C progress_bar: enabled: true progress_type: circular position: left size: 18 thickness: 3 color: #00C800 background_color: #3C3C3C animation: true底层实现要点progress_bar.py构造时根据progress_type决定几何尺寸circular为size × size固定方形linear_horizontal为size × thicknesslinear_vertical为thickness × size见 progress_bar.py圆形进度使用QConicalGradient绘制弧线角度跨度 value/100 * 360°线性进度通过圆角矩形 裁剪区域实现保证进度边缘圆角与底色完全吻合见 progress_bar.py渐变色color传入数组时按索引等分生成色标圆形用圆锥渐变、线性用线性渐变单色则直接使用QColor见 progress_bar.py动画animation: true时通过QPropertyAnimation400ms、OutCubic 缓动平滑过渡数值set_value内部将数值钳制在 0–100且差值小于 0.9 时跳过动画见 progress_bar.py。进度条在_update_label中按position插入到标签容器首或尾并随每次刷新同步更新为当前已用百分比见 disk.py。样式钩子为.disk-widget .progress-container。八、多磁盘组标签弹窗group_labelgroup_label用于配置左键弹出toggle_group的多磁盘监控窗口完整选项如下默认值来自 验证模型选项类型默认值说明volume_labelslist[C]弹窗中展示的盘符列表show_label_namebooltrue是否显示卷标名如Windows (C):blurbooltrue弹窗背景模糊效果round_cornersbooltrue弹窗圆角round_corners_typestringnormal圆角类型normal或smallborder_colorstringSystem边框色None/System/ 十六进制色如#ff0000alignmentstringright对齐方式left/center/rightdirectionstringdown弹出方向up/downoffset_topinteger6距屏幕/部件顶部偏移像素offset_leftinteger0距左侧偏移像素提示官方文档历史示例中曾出现distance: 6但当前验证模型GroupLabelConfig仅声明offset_top/offset_left两个偏移字段且CustomBaseModel使用extraforbid见 base_model.py会拒绝未声明字段因此请使用offset_top/offset_left控制弹窗偏移避免配置校验失败。弹窗内部每一行包含卷标与盘符显示名 (C):、右侧剩余/总容量自动换算单位、以及一条隐藏数值的 QProgressBar 使用率条。源码逻辑disk.py弹窗本体为无边框、置顶、半透明的PopupWidget实现见 utilities.py支持模糊、圆角、边框色容量显示单位自动适配总容量或剩余容量超过 1000GB 时改用 TB 显示否则用 GB见 disk.py每行是ClickableDiskWidget重写mousePressEvent发射clicked信号点击后通过os.startfile(f{label}:\\)打开对应盘符的资源管理器见 disk.py 与 disk.py弹窗定位由PopupWidget.setPosition完成alignment控制左/中/右对齐direction控制向上/向下展开offset_left/offset_top为像素偏移并会自动检测父部件所在屏幕、确保弹窗不越出屏幕边界utilities.py。九、鼠标回调callbackscallbacks定义左/中/右键行为可用值回调行为toggle_label在label与label_alt之间切换toggle_group弹出/关闭多磁盘组标签窗口do_nothing无操作exec command执行任意命令如exec explorer C:\\回调分派发生在 BaseWidget左键触发callback_left、中键callback_middle、右键callback_right。exec会先检查命令是否命中内置系统功能表如quick_settings、notification_center、start_menu等见 system_function.py未命中则通过subprocess.Popen以 shell 方式执行见 base.py。toggle_label与toggle_group由 DiskWidget 自身注册见 disk.py。版本差异提示官方文档表格中callbacks默认值写作on_right: exec explorer C:\\而当前源码验证模型CallbacksDiskConfig继承通用CallbacksConfig三键默认do_nothing并将on_left默认覆盖为toggle_label见 disk.py 验证模型。以仓库当前实现为准建议在配置中显式声明全部回调避免依赖默认值。十、组件样式定制Disk Widget 的完整 CSS 钩子官方文档原样.disk-widget {} .disk-widget.your_class {} /* 使用 class_name 选项时生效 */ .disk-widget .widget-container {} .disk-widget .widget-container .label {} .disk-widget .widget-container .label.alt {} .disk-widget .widget-container .icon {} /* 阈值状态类 */ .disk-widget .widget-container .label.status-low {} .disk-widget .widget-container .label.status-medium {} .disk-widget .widget-container .label.status-high {} .disk-widget .widget-container .label.status-critical {} /* 组标签弹窗样式 */ .disk-group {} .disk-group-row {} .disk-group-label {} .disk-group-label-size {} .disk-group-label-bar {} .disk-group-label-bar::chunk {} /* 启用进度条后的容器样式 */ .disk-widget .progress-container {}一个完整的弹窗样式示例官方文档含悬停高亮与内嵌进度条.disk-group { background-color: rgba(17, 17, 27, 0.75); } .disk-group-row { min-width: 220px; max-width: 220px; max-height: 40px; margin: 0; padding: 0; border-radius: 6px; border: 1px solid rgba(128, 128, 128, 0); } .disk-group-row:hover { background-color: rgba(255, 255, 255, 0.05); border: 1px solid rgba(255, 255, 255, 0.1); } .disk-group-label-bar { max-height: 8px; border: 0px solid rgba(128, 128, 128, 0); background-color: rgba(137, 180, 250, 0.1); border-radius: 4px; } .disk-group-label-bar::chunk { background-color: rgba(137, 180, 250, 0.3); border-radius: 4px; } .disk-group-label { font-size: 10px; } .disk-group-label-size { font-size: 10px; color: #585b70; }十一、综合实战图标 弹窗菜单组合下面是一个仅显示图标 左键弹出多盘监控的完整组合官方文档示例适合将磁盘状态收纳为极简任务栏图标disk: type: yasb.disk.DiskWidget options: label: span\uf473/span label_alt: span\uf473/span group_label: volume_labels: [C, D, E, F] show_label_name: true blur: True round_corners: True round_corners_type: normal border_color: System alignment: right direction: down offset_top: 6 offset_left: 0 callbacks: on_left: toggle_group配套样式图标留白 半透明弹窗配色.disk-widget { padding: 0 6px 0 6px; } .disk-group { background-color: rgba(17, 17, 27, 0.4); } .disk-group-row { min-width: 220px; max-width: 220px; max-height: 40px; margin: 0; padding: 0; border-radius: 6px; border: 1px solid rgba(128, 128, 128, 0); } .disk-group-row:hover { background-color: rgba(255, 255, 255, 0.05); border: 1px solid rgba(255, 255, 255, 0.1); } .disk-group-label-bar { max-height: 8px; border: 0px solid rgba(128, 128, 128, 0); background-color: rgba(137, 180, 250, 0.1); border-radius: 4px; } .disk-group-label-bar::chunk { background-color: rgba(61, 135, 255, 0.3); border-radius: 4px; } .disk-group-label { font-size: 10px; } .disk-group-label-size { font-size: 10px; color: #666879; }结语Disk Widget 把磁盘容量监控做成了可深度定制的状态栏组件label模板变量覆盖 MB/GB/TB 全量容量维度disk_thresholds提供四档语义化状态类progress_bar支持三种形态与渐变动画group_label则把单盘监控扩展为多盘弹窗总览并可一键跳转资源管理器。所有配置均在 验证模型 中声明了类型与取值边界如decimal_display0–3、update_interval0–3600、阈值 0–100配置错误会在启动校验阶段被拦截配合 disk.py 与 progress_bar.py 的实现阅读可进一步按需扩展自定义行为。赞分享桌面应用【免费下载链接】yasbA highly configurable Windows status bar written in Python.项目地址https://gitcode.com/gh_mirrors/yas/yasb点击查看免费下载相关推荐Glances 磁盘 I/ODisk I/O插件完整指南吞吐量、IOPS、延迟与阈值配置Glances 磁盘 I/ODisk I/O插件完整指南吞吐量、IOPS、延迟与阈值配置 Glances 是一款跨平台的系统监控工具其 Disk I/O指标监控监控大盘CLI告警MCP 服务CouchDB Disk Monitor 磁盘监控配置详解从阈值参数到源码级实现CouchDB Disk Monitor 磁盘监控配置详解从阈值参数到源码级实现 CouchDB 从 3.4 版本起内置了磁盘监控子系统Disk Monit数据库文档数据库后端MAS激活工具4种方法免费激活Windows与Office完整指南MAS激活工具4种方法免费激活Windows与Office完整指南 Microsoft Activation ScriptsMAS是一款开源激活器一个工操作系统上一篇iOS开发者必学PinterestSegment的实现原理与动画机制深度剖析下一篇React Select Search 无头模式教程使用 Hooks 构建完全自定义的选择组件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考