Что ж, пока вы не обнаружили поддержку 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]
Я смутно помню, как важно, что позиции строго увеличиваются, я думаю, что игнорируются любые, которые не больше, чем предыдущая остановка, так что, вероятно, хорошо держать это в уме.