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

Python pptx库addtext函数忽略字体大小与颜色问题排查

字体设置失效的原因及修复

你的代码里有两个核心问题导致字体大小、颜色设置被忽略,还有一个编码习惯问题需要优化:

  • 未关联到文本Run的字体对象
    你在addtext函数里直接用font.name这类语句,但font变量根本没定义,也没有绑定到你创建的run对象的字体属性上。必须通过run.font来获取字体对象,才能对文本的字体属性进行实际修改。

  • 缺少RGBColor的导入
    代码里用了RGBColor来设置颜色,但没有从pptx.dml.color导入这个类,要么会直接报错,要么颜色设置根本不生效。

  • 依赖全局变量的不良习惯
    addtext函数直接使用外部的slide变量,虽然能运行,但不利于代码复用和维护,建议把slide作为参数传入函数。

下面是修复后的完整代码:

from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor  # 新增RGBColor的导入
import pandas as pd

prs = Presentation()
blank_slide_layout = prs.slide_layouts[6]

data = {
    'titolo': ['Pizza Margherita', 'Bolognese', 'Fish and Chips', 'Tacos', 'Sushi', 'Paella', 'Spaghetti Carbonara', 'Couscous', 'Falafel', 'Goulash'],
    'commenti': ['pomodoro, mozzarella, basilico', 'pomodoro, carne macinata, carote, sedano, cipolla', 'pesce fritto, patatine fritte', 'carne, cipolle, peperoni, pomodoro, avocado', 'riso, pesce crudo, alga nori', 'riso, pollo, gamberi, verdure', 'uova, pancetta, pecorino romano', 'couscous, agnello, verdure', 'fagioli, cipolle, spezie', 'carne, paprika, patate'],
    'numero': [8, 12, 10, 9, 15, 20, 14, 18, 6, 16],
    'paese': ['Italia', 'Italia', 'Regno Unito', 'Messico', 'Giappone', 'Spagna', 'Italia', 'Marocco', 'Medio Oriente', 'Ungheria']
}

df = pd.DataFrame(data)

# 修改后的addtext函数:传入slide参数,正确绑定run的字体对象
def addtext(slide, titlee, L, T, SS, RR, GG, BB):
    txBox = slide.shapes.add_textbox(Inches(L), Inches(T), Inches(1), Inches(1))
    tf = txBox.text_frame
    p = tf.paragraphs[0]
    run = p.add_run()
    run.text = titlee
    # 获取当前run的字体对象
    font = run.font
    font.name = 'Calibri'
    font.size = Pt(SS)
    font.color.rgb = RGBColor(RR, GG, BB)

for index, row in df.iterrows():
    slide = prs.slides.add_slide(blank_slide_layout)
    # 调用时传入当前slide
    addtext(slide, row['titolo'], .2, 1, 42, 0, 0, 255)
    addtext(slide, row['commenti'], .2, 2, 22, 102, 255, 102)
    addtext(slide, 'Costo medio: ' + str(row['numero']) + ' €', .2, 5, 18, 32, 32, 255)

prs.save('test.pptx')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:08:14