图标系统
首选 MSO_SHAPE.* —— PowerPoint 原生形状,矢量、可编辑、配色随主题。 复杂图标(齿轮、放大镜、文件夹等无对应 MSO_SHAPE)再走 render_icon.py 用 unicode 字形栅格化为 PNG。
A. MSO_SHAPE 图标目录
from pptx.enum.shapes import MSO_SHAPE
标记类 (放在 bullet 前 / 标题旁)
| 用途 |
MSO_SHAPE |
说明 |
| 圆点 bullet |
OVAL |
0.18×0.18 in,实心填充 |
| 方点 bullet |
RECTANGLE |
0.16×0.16 in,实心 |
| 钻石点 |
DIAMOND |
0.2×0.2 in |
| 对号 ✓ |
CHEVRON 旋转 / 或用字形 |
MSO 没有专门"check"形;用字形更清晰 |
| 加号 + |
MATH_PLUS |
强调"新增"语境 |
| 星 ★ |
STAR_5_POINT |
重点项;不要每页都用 |
| 心 |
HEART |
用户向 / 软话题 |
箭头类 (流程 / 趋势)
| 用途 |
MSO_SHAPE |
说明 |
| 右箭头 → |
RIGHT_ARROW |
流程下一步 |
| 上箭头 ↑ |
UP_ARROW |
增长 |
| 下箭头 ↓ |
DOWN_ARROW |
下降 |
| 双向箭头 ↔ |
LEFT_RIGHT_ARROW |
对比 / 关联 |
| 折线右箭头 |
BENT_ARROW / CURVED_RIGHT_ARROW |
转折 |
| 五边形流程 |
PENTAGON |
流程节点(横排) |
| V 形 |
CHEVRON |
流程节点(空间紧) |
几何/装饰
| 用途 |
MSO_SHAPE |
说明 |
| 圆形头像底 |
OVAL |
头像/数字徽章 |
| 圆角矩形 |
ROUNDED_RECTANGLE |
标签 / 按钮态 |
| 标注气泡 |
ROUNDED_RECTANGULAR_CALLOUT |
引述 |
| 雷电 |
LIGHTNING_BOLT |
突破 / 创新 |
| 太阳 |
SUN |
机会 / 启示 |
| 月亮 |
MOON |
夜晚 / 安静主题 |
| 云 |
CLOUD |
SaaS / 网络主题 |
| 禁止 |
NO_SYMBOL |
反模式 / 禁止 |
| 笑脸 |
SMILEY_FACE |
用户满意 |
引用/装饰
| 用途 |
MSO_SHAPE |
说明 |
| 大引号 |
字形 " 或 LEFT_BRACE |
金句页常用 |
| 横线分隔 |
RECTANGLE 高 0.04 in |
标题下装饰线 |
| 竖线分隔 |
RECTANGLE 宽 0.04 in |
双栏中线 |
| 三点 ⋯ |
OVAL × 3 |
加载 / 进行中 |
B. 标准用法
B1. 圆点 bullet
from pptx.enum.shapes import MSO_SHAPE
from pptx.util import Inches
def add_dot(slide, x, y, size=0.18, color=ACCENT):
dot = slide.shapes.add_shape(MSO_SHAPE.OVAL,
Inches(x), Inches(y),
Inches(size), Inches(size))
dot.fill.solid(); dot.fill.fore_color.rgb = color
dot.line.fill.background()
return dot
B2. 编号徽章 (圆 + 数字)
def add_badge(slide, x, y, num, diameter=0.7,
fill=PRIMARY, fg=RGBColor(255,255,255)):
circle = slide.shapes.add_shape(MSO_SHAPE.OVAL,
Inches(x), Inches(y),
Inches(diameter), Inches(diameter))
circle.fill.solid(); circle.fill.fore_color.rgb = fill
circle.line.fill.background()
tf = circle.text_frame
tf.text = str(num)
p = tf.paragraphs[0]
p.alignment = PP_ALIGN.CENTER
r = p.runs[0]
r.font.bold = True
r.font.size = Pt(20)
r.font.color.rgb = fg
r.font.name = "Arial"
return circle
B3. 流程节点 (五边形)
def add_pentagon(slide, x, y, w, h, text, fill=PRIMARY):
shp = slide.shapes.add_shape(MSO_SHAPE.PENTAGON,
Inches(x), Inches(y),
Inches(w), Inches(h))
shp.fill.solid(); shp.fill.fore_color.rgb = fill
shp.line.fill.background()
tf = shp.text_frame
tf.text = text
p = tf.paragraphs[0]; p.alignment = PP_ALIGN.CENTER
r = p.runs[0]; r.font.size = Pt(14); r.font.bold = True
r.font.color.rgb = RGBColor(255,255,255); r.font.name = "微软雅黑"
return shp
# 用法:水平排五个节点
for i, label in enumerate(["调研","设计","开发","测试","上线"]):
add_pentagon(slide, 0.7 + i*2.4, 3.5, 2.2, 0.8, label)
B4. 强调箭头 (右箭头)
def add_arrow_right(slide, x, y, w, h, fill=ACCENT):
a = slide.shapes.add_shape(MSO_SHAPE.RIGHT_ARROW,
Inches(x), Inches(y),
Inches(w), Inches(h))
a.fill.solid(); a.fill.fore_color.rgb = fill
a.line.fill.background()
return a
B5. 标题装饰线
def add_accent_line(slide, x, y, length=1.0, thickness=0.05, color=ACCENT):
"""标题下面那条 1 寸长的强调横线 (替代大色块的轻量做法)"""
bar = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE,
Inches(x), Inches(y),
Inches(length), Inches(thickness))
bar.fill.solid(); bar.fill.fore_color.rgb = color
bar.line.fill.background()
return bar
C. Unicode 字形 (MSO_SHAPE 没有的图形)
某些图标 MSO_SHAPE 没有对应,用 unicode 字形渲染成 PNG 嵌入。Win/Mac 默认字体覆盖良好。
推荐字形 (避开 emoji,用单色符号)
✓ ✔ ✗ ✘ 对号 / 错号
✦ ✧ ✪ ★ 星
→ ← ↑ ↓ ↔ 箭头
⬛ ⬜ ◆ ◇ 方块菱形
● ○ ◉ ◎ 圆
※ ◇ ⬢ ⬡ 装饰
☰ ☱ ☲ ☳ 汉字六十四卦类(简洁)
∴ ∵ ⇒ ⇔ 数学
№ ¶ § † 文档符号
↗ ↘ ↙ ↖ 斜箭头
⌘ ⌥ ⌃ ⏎ 键盘
用 render_icon.py 生成
# 生成对号 PNG (强调色,96px)
python scripts/render_icon.py "✓" --color "#38B2AC" --size 96 -o slides/check.png
# 然后嵌入幻灯片
slide.shapes.add_picture("slides/check.png", Inches(1), Inches(2),
width=Inches(0.5))
D. 用图标的几条原则
- 同一 deck 风格统一 —— 全用 MSO_SHAPE 或全用字形 PNG,不要混
- 颜色限定 —— 只用 PRIMARY / SECONDARY / ACCENT / GREY,不要每个图标独立配色
- 大小克制 —— bullet 前的 dot 0.15-0.2 in;独立装饰图标 0.5-1.5 in;不要超过 2 in
- 间距统一 —— 图标右侧到文字的间距固定,通常 0.2-0.3 in
- 不替换文字 —— 图标是辅助,不是表意主体;一个 ★ 不能代替"重点"两字
- 避免 emoji —— emoji 在不同系统渲染差异大,且自带颜色与你的配色冲突
E. 不要做什么
- ❌ 在每页都堆图标
- ❌ 用网上随便下载的彩色图标 (主题不统一)
- ❌ 用 emoji (🚀💡⚡) 当严肃汇报的图标
- ❌ 图标尺寸大于标题字号高度的 2 倍
- ❌ 用 STAR / HEART 装饰严肃议题 (融资额、合规)