You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用python-pptx将单个单词置于PPT幻灯片中央?

使用python-pptx实现文本框在幻灯片中央的解决方案

问题说明

使用python-pptx生成PPT时,需要将预设列表中的单个单词分别放在每页幻灯片中央。目前已实现每页生成对应单词、设置字体大小和加粗,但无法将文本框本身定位到幻灯片中央——仅通过paragraph.vertical_anchor和paragraph.alignment只能调整文本框内文字的对齐,无法移动文本框位置,尝试注释中的多种方法均未成功。

解决思路

核心问题在于:

  • 文本框的位置/尺寸由slide.shapes.add_textbox()返回的**shape对象(txBox)**控制,而非text_frame(tf);
  • 初始创建文本框时用了固定宽高,导致后续计算居中时尺寸不匹配;
  • 需要先设置好文字样式,确保文本框尺寸匹配内容后,再计算居中位置。

具体步骤:

  1. 先创建文本框(可临时设置宽高);
  2. 设置文字内容和样式;
  3. 让文本框自适应内容尺寸(或获取实际内容宽度);
  4. 基于幻灯片的宽高,计算文本框的居中left和top值,赋值给shape对象的对应属性。

修正后的完整代码

from pptx import Presentation  
from pptx.util import Inches, Pt 
from pptx.enum.text import MSO_ANCHOR, PP_ALIGN
import random

adjectifs = ["grand", "petit", "beau", "laid", "joli", "moche", "intelligent", "stupide", "gentil", "méchant"]
random.shuffle(adjectifs)
  
ppt = Presentation()  
blank_slide_layout = ppt.slide_layouts[6]  

for adjectif in adjectifs:
    slide = ppt.slides.add_slide(blank_slide_layout)
    # 先创建一个临时尺寸的文本框,后续会调整
    txBox = slide.shapes.add_textbox(0, 0, Inches(1), Inches(1))
    tf = txBox.text_frame
    
    # 设置文字内容和样式
    tf.text = adjectif
    paragraph = tf.paragraphs[0]
    paragraph.font.size = Pt(60)
    paragraph.font.bold = True
    paragraph.vertical_anchor = MSO_ANCHOR.MIDDLE
    paragraph.alignment = PP_ALIGN.CENTER
    
    # 让文本框自适应内容尺寸
    txBox.text_frame.fit_text(font_family="Calibri", max_size=60, bold=True)
    
    # 计算居中位置:幻灯片宽高减去文本框宽高后取半
    slide_width = ppt.slide_width
    slide_height = ppt.slide_height
    txBox.left = (slide_width - txBox.width) / 2
    txBox.top = (slide_height - txBox.height) / 2

ppt.save('50_Adjectifs.pptx') 
print("done") 

关键细节说明

  • ppt.slide_width和ppt.slide_height直接获取幻灯片的标准宽高(避免通过slide对象获取时的属性错误);
  • txBox.text_frame.fit_text()会自动调整文本框尺寸匹配文字内容,确保计算居中时的尺寸准确;
  • 最终通过修改txBox.left和txBox.top实现文本框在幻灯片中的居中定位。

内容的提问来源于stack exchange,提问作者Auro_Bindo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 12:07:06