Skip to content

NE 合集 17 · 图表(二):环形图与仪表盘 ​

《LingBuilder new_emoji 合集》第 17 集。图表 family 的最后两位成员:DonutChart 环形图(看占比)和 Gauge 仪表盘(看健康分)。这一集有个好消息和一个坏消息:好消息是仪表盘是图表里唯一能运行期改数的(一条命令的事);坏消息是环形图是「固定画法」,圆心半径写死在引擎里,还和图例有个先天重叠的坑。全程约 35 分钟。

前置要求:完成第 01 集;建议先看第 16 集(折线图与柱状图),本集延续「展示件」这条线。本集源码包见文末。

这一集你将学会 ​

  • DonutChart:slices 一行一片(名称 + 制表符 + 数值),占比自动算角度;showLegend 图例、ringWidth 环宽
  • Gauge:value 当前值、status 状态色、warningValue / dangerValue 两条阈值线
  • 仪表盘的运行期命令:控件_设置数值 改分数、控件_取数值 读分数——图表家族里独一份
  • 三个必须知道的引擎行为:环形图圆心半径固定;环上标签(showLabels)会和图例重叠;控件_设置数值 会把说明文字换成默认的「📍 当前状态」

先看一眼本集成品——环形图与仪表盘同框,占比和健康分一眼看清:

成品预览

1. 命令与事件预告 ​

命令 / 事件作用
控件_设置数值(仪表盘, 95)改仪表盘当前值(Gauge 专属分支)
控件_取数值(仪表盘)读回当前值,返回整数型
鼠标按下 事件参数 整数型 横坐标, 整数型 纵坐标, 整数型 鼠标按钮,坐标相对控件内容区
(无数据事件)环形图没有「点了第几片」事件——扇区切换是引擎内置行为,代码只拿得到坐标

本集只需要 new_emoji 模块。

2. 新建项目 + 启用模块 + 切后端 ​

流程和第 1 集一样,项目名称填 服务健康监控台:

欢迎页

选择项目类型

填写项目名

进入工作台

模块面板搜「原生界面」→ 启用「new_emoji 原生界面库」(首次会弹登录框,登录一次即可):

搜索并启用

已启用

界面设计 → 选中窗口 → 确认「设计后端」是 new_emoji 模块:

切换设计后端

工具箱

3. 设计界面 ​

窗口 1000×680,左边环形图、右边仪表盘,下面一排按钮和速查条。

控件名称左距顶距宽度高度关键属性
文本 Text标题文本322070036🍩 图表(二):环形图与仪表盘,字号 21 粗体
文本 Text副标题文本326290024字号 13,#94A3B8
分割线 Divider标题分割线329693628占比与健康分同框:环形图纯展示,仪表盘能在线改数值
文本 Text环形标签3213243022① DonutChart 环形图(占比 + 图例 + 标签)
环形图 DonutChart流量来源32158400230slices 三片;showLegend=真;ringWidth=28;showLabels=假
文本 Text仪表标签49213247622② Gauge 仪表盘(健康分 + 阈值变色)
仪表盘 Gauge服务健康492158476240value=78;caption=整体良好;status=1(成功);warningValue=70;dangerValue=90;strokeWidth=12
文本 Text环形小实验3241043060悬停/点击扇区的小实验说明,字号 12
文本 Text按钮引导49241047622③ 点下面按钮改健康分,看弧线颜色怎么变
按钮 Button高峰按钮49244415038🔥 高峰 95,样式=危险(4)
按钮 Button预警按钮65044415038⚠️ 预警 75,样式=警告(3)
按钮 Button空闲按钮80844415038🔵 空闲 40,样式=信息(6)
文本 Text数据协议说明3249693688字号 12,#94A3B8,自动换行
文本 Text状态文本3259293656字号 14,#7DD3FC,自动换行

3.1 数据格式:一行一片,名称和数值之间放一个制表符 ​

环形图的 slices(三片):

官网	45
广告	30
转介绍	25

和折线图的 points、柱状图的 bars 是同一个协议:一行填一条,名称敲完按一次 Tab 再敲数值。数值不必加起来等于 100,引擎按「单片 ÷ 总和」算百分比——上面三片总和 100,所以中心直接显示 45%。

3.2 环形图的「固定画法」:控件大小不改变圆的大小 ​

这是环形图和折线/柱状最大的差异——它的几何写死在引擎里:

  • 圆心固定在控件左上角往右 92、往下 132 的位置,半径固定 64;
  • 图例固定从 (190, 62) 开始往下排,每行 28 像素,最多 5 片;
  • 所以把控件拉大,圆不会变大,只会多出空白。本集给 400×230,刚好装下环 + 图例。

设计器全景

红线:showLabels(环上百分比标签)默认开,但会和图例行重叠。 标签画在固定半径处,官网那片的「45%」正好压进图例第三行的位置——这是引擎固定坐标的先天冲突,不是你摆错了。图例本身就带百分比(官网 45% / 广告 30% / 转介绍 25%),所以本集直接把 showLabels 关掉,画面立刻清爽。

3.3 Gauge 的状态色与阈值色 ​

属性作用
value / caption当前分数 / 弧线下方那行说明文字
status固定颜色:0=信息(蓝)、1=成功(绿)、2=警告(黄)、3=错误(红),优先级高于阈值
warningValue / dangerValue两条阈值线;状态为「信息」时才生效:越过 warning 变黄、越过 danger 变红
strokeWidth弧线粗细,6~32

本集初始值 78、状态设成「成功」——所以弧线是绿色的,哪怕 78 其实已越过 70 的预警线。想让它「按阈值自动变色」,把状态留在「信息」即可(点完按钮你会亲眼看到这套规则)。

4. 写代码 ​

lcpp
类 MainWindow
    事件 _MainWindow_创建完毕()
        控件_设置文本(状态文本, "💚 服务健康分初始 78:设计器里把状态设成了「成功」,所以弧线是绿色的。点右边按钮,看引擎按阈值变色。")
        调试输出("服务健康监控台已创建完毕")
    结束

    事件 _流量来源_鼠标按下(整数型 横坐标, 整数型 纵坐标, 整数型 鼠标按钮)
        控件_设置文本(状态文本, "🍩 环形图:按下位置 x=" + 到文本(横坐标) + " y=" + 到文本(纵坐标) + "。落在环上的点击会自动切换活动扇区(引擎内置),代码只能拿到坐标。")
    结束

    事件 _高峰按钮_被单击()
        控件_设置数值(服务健康, 95)
        控件_设置文本(状态文本, "🔥 高峰模式:健康分 95 越过危险线 90,弧线自动变红。说明文字被引擎换成了默认的「📍 当前状态」——通用命令只改数字。")
    结束

    事件 _预警按钮_被单击()
        控件_设置数值(服务健康, 75)
        控件_设置文本(状态文本, "⚠️ 预警模式:健康分 75 落在 70~90 区间,弧线自动变黄。")
    结束

    事件 _空闲按钮_被单击()
        控件_设置数值(服务健康, 40)
        控件_设置文本(状态文本, "🔵 空闲模式:健康分 40 低于 70,弧线是「信息」蓝色。读回当前分数:" + 到文本(控件_取数值(服务健康)) + "。")
    结束
结束类

三个看点:

  1. 处理器参数必须带类型(整数型 横坐标 等),这是 new_emoji 所有控件的统一要求。
  2. 控件_设置数值 是仪表盘唯一的改数命令——它只改数字,说明文字会被引擎替换成默认的「📍 当前状态」,状态色也会回到「信息」。好消息是状态=信息时引擎按阈值自动变色,所以弧线照样会变红变黄;坏消息是想保住自定义说明文字,只能在改完数值后想办法(运行期没有「设置说明」的中文命令,这条留给进阶篇的底层直调)。
  3. 控件_取数值 能把分数读回来——注意它写在字符串拼接里,要包一层 到文本(...)。

代码上半

代码中段

代码下半

5. 编译前先看错误列表 ​

点「编译当前项目」,先看底部错误列表——零报错再继续:

错误列表零报错

6. 运行!四个互动各试一次 ​

点「运行」。左边环形图、右边绿色仪表盘(78 分,状态「成功」),下面三个彩色按钮:

运行窗口

① 点环形图上绿色的「广告」片——中心大数字从「45% 官网」变成「30% 广告」,被点中的片加粗。这个扇区切换是引擎内置的,一行代码都不用写;代码里的 鼠标按下 只拿到了坐标:

点环形图

② 点「高峰 95」——95 越过危险线 90,弧线自动变红,指针转过去。同时注意弧线下方:说明文字「整体良好」被换成了默认的「📍 当前状态」,这就是 控件_设置数值 的边界:

高峰95

③ 点「预警 75」——75 落在 70~90 区间,弧线变黄:

预警75

④ 点「空闲 40」——40 低于 70,弧线恢复「信息」蓝色;状态栏把 控件_取数值 读回来的 40 拼进了提示,证明读写闭环:

空闲40

7. 导出源码包 ​

命令面板执行「项目:一键导出 LCPP 源码包」即可。

本集源码包 ​

下一集预告 ​

消息与通知:Message 轻提示、MessageBox 确认框、Notification 通知、Alert 警告条——程序怎么「开口说话」。