gpt4 book ai didi

python-3.x - 除了默认的两个之外,如何使用 python-pptx 为形状添加额外的渐变填充停止点

转载 作者:行者123 更新时间:2023-12-04 15:44:18 24 4
gpt4 key购买 nike

我有一个形状,可以更改形状以使用渐变填充。如果它之前有比默认两个更多的梯度停止,我可以解析它们,更改它们并删除它们。但是,我找不到如何添加额外的渐变停止点。这就是我想要的。文档非常正确地指出了三个梯度停止点是一个常见的需求。

我找到了“gradient_stops._gsLst”,但不知道添加新梯度停止点的正确方法。

我尝试使用 gradient_stops.append() ,它给了我预期的明确提示(lxml.etree._Element)。但我找不到任何描述创建此类元素的正确方法的内容。我希望解决方案可以提供下面提到的“一些新的 GradientStop 元素”:

shape.fill.gradient_stops._gsLst.append("some new GradientStop Element")

尝试复制一个现有的 Gradient Stop 元素感觉像是在做太多的实验......

最佳答案

好吧,正如您所发现的那样,目前尚无 API 支持。但是,梯度停止元素 ( <a:gs> ) 被定义为 OneOrMore子元素,这意味着可以将新元素添加到 CT_GradientStopList 中那些元素的末尾通过调用 <a:gsLst> 对象 ( .add_gs() )在那个物体上。

所以像这样的事情会沿着正确的方向做事情:

>>> len(gradient_stops)
2
>>> gsLst = gradient_stops._gsLst
>>> gsLst.add_gs()
<CT_GradientStop object ... or something like that>
>>> len(gradient_stops)
3
new_gradient_stop = gradient_stops[-1]

问题是它是否会是一个有效的渐变停止元素,或者它是否会触发修复错误;我敢打赌它不会被填充得足够多,而且没有简单的方法可以使用 API 添加子元素。

也许更好的方法是从 XML 中解析它:

from pptx.oxml import parse_xml
from pptx.oxml.ns import nsdecls

new_gs = parse_xml(
'<a:gs pos="0" %s>\n'
' <a:schemeClr val="accent1">\n'
' <a:tint val="100000"/>\n'
' <a:shade val="100000"/>\n'
' <a:satMod val="130000"/>\n'
" </a:schemeClr>\n"
"</a:gs>\n" % nsdecls("a")
)
gradient_stops._gsLst.append(new_gs)

这与在已经存在的停靠点之一上进行深层复制大致相同,只是您可以指定颜色类型,例如 a:srgbClr如果您不想使用主题颜色。但是,如果您知道您拥有的一个与您想要的那个一样,只是需要不同的位置和一些颜色调整或其他任何东西,那么深度复制方法可能更适合。

from copy import deepcopy

gsLst = gradient_stops._gsLst
new_gs = deepcopy(gsLst[0])
gsLst.append(new_gs)
new_gradient_stop = gradient_stops[-1]

我依稀记得仓位严格增加很重要,我认为它忽略了任何不超过先前止损的仓位,因此最好将其牢记在心。

关于python-3.x - 除了默认的两个之外,如何使用 python-pptx 为形状添加额外的渐变填充停止点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56548723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com