【问题标题】:Python-PPTX Area Chart TransparencyPython-PPTX 面积图透明度
【发布时间】:2017-07-01 17:23:24
【问题描述】:

我有一个使用 Python PPTX 创建的面积图,我需要设置系列的填充透明度。我已经通过以下解决方法实现了这一点,但它似乎太复杂了。我希望有 python-pptx 提供的实用功能,这样就不需要在 lxml 周围破解。

from lxml.etree import Element, SubElement, QName
ns = "http://schemas.openxmlformats.org/drawingml/2006/main"

xPr = prs.slides[3].placeholders[17].chart.series[0].format.fill._xPr
srgbClr = xPr.get_or_change_to_solidFill().get_or_change_to_srgbClr()
alpha = SubElement(srgbClr, QName(ns ,'alpha'), nsmap={'a':ns})
alpha.set('val','50196')

实现这一目标的更简洁的方法是什么?

【问题讨论】:

    标签: python python-pptx


    【解决方案1】:

    好吧,我不确定它是否干净得多,但如果您想尽可能多地使用 python-pptx 调用,这可能是一个可以考虑的替代方案:

    from pptx.dml.color import RGBColor
    from pptx.oxml.xmlchemy import OxmlElement
    
    # ---set the fill to solid red using regular python-pptx API---
    chart_fill = prs.slides[3].placeholders[17].chart.series[0].format.fill
    chart_fill.solid()
    chart_fill.fore_color.rgb = RGBColor(255, 0, 0)
    
    # ---add an `a:alpha` child element---
    solidFill = chart_fill.fore_color._xFill
    alpha = OxmlElement('a:alpha')
    alpha.set('val', '50196')
    solidFill.srgbClr.append(alpha)
    

    一般概念是 python-pptx API 对象,如 chartformat 是 lxml 元素的 代理 对象。 API 对象在私有变量中组成(“包装”)lxml 元素对象。例如,对于自选图形,私有变量是 Shape._sp。在可能的情况下(几乎总是),该变量与元素具有相同的名称,例如 _sp 对应于 <p:sp>。有时元素可以有不同的名称。在这种情况下,我将变量部分替换为x。所以_xFill 有时可能是 a:solidFill 对象,有时可能是 a:pattFill 对象。

    另外,不久前我开始使用._element 作为代理元素的变量名,因此它是标准化的。通常我都有(例如_sp_element 指的是同一个元素对象),因为它们在不同的情况下都很方便。

    要知道变量名称是什么,您可以猜测(一旦您知道模式,它的工作频率可能比预期的要高),或者您可以检查代码或内省对象。找到正确的代理对象后,单击 API 文档中的 [source] 链接是检查代码的快速方法。 http://python-pptx.readthedocs.io/en/latest/api/dml.html#pptx.dml.color.ColorFormat

    【讨论】:

    • 当 opc-diag 给我 '' 作为父级时,我怎么知道 '_xFill' 是附加 'alpha' 的元素?每当我研究 opc-diag output 时,这种情况就会发生很多次。是否有文档知道哪些常见属性,即“xFill”、“xPr”、“spPr”、“nvPr”、“extLst”、“txBody”等对应?
    • 测试了代码。最后一行需要solidFill.srgbClr.append(alpha)
    • 我已经详细说明了响应以解释所有这些是如何工作的。
    猜你喜欢
    • 1970-01-01
    • 2016-11-07
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    相关资源
    最近更新 更多