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
相关产品推荐
相关产品推荐

