Хорошее начало для понимания этого - проверка XML-формы группы:
print(group_shape._element.xml)
Там вы найдете дочерний элемент, который выглядит следующим образом:
<p:grpSpPr>
<a:xfrm>
<a:off x="3347864" y="2204864"/>
<a:ext cx="3506688" cy="2930624"/>
<a:chOff x="3347864" y="2204864"/>
<a:chExt cx="3506688" cy="2930624"/>
</a:xfrm>
</p:grpSpPr>
Элемент <a:chOff>
представляет «дочернее смещение» фигур в группе. В этом случае, что типично для фигур, сгруппированных в python-pptx
, обратите внимание, что значения a:chOff
в точности совпадают со значениями a:off
, которые представляют левый верхний угол формы группы.
Используя эти два набора значений, вы можете вычислить некоторые интересные позиции.
Абсолютное положение дочерних фигур. Это дочерний элемент a:off
плюс группа a:off
минус группа a:chOff
.
Относительное положение дочерних фигур (к началу координат в форме группы). Это ребенок a:off
минус группа a:chOff
.
Вы можете получить эти дополнительные значения дочернего смещения из группы с помощью:
chOff = group_shape._element.xpath("./p:grpSpPr/a:xfrm/a:chOff")[0]
chOff_x = int(chOff["x"])
chOff_y = int(chOff["y"])
Эти значения приведены в английских метрических единицах (EMU), которые описаны здесь вместе с тем, как вам удобно ими манипулировать:
https://python -pptx.readthedocs.io / о / последняя / пользователя / autoshapes.html # понимание-английская метрические единицы
python-pptx
всегда использует дочернее смещение, равное позиции формы группы (a:off
), потому что это удобно. Другие пакеты могут использовать другие смещения в форме группы, которые более удобны для их целей. Например, если бы вы переместили группу, вы могли бы добиться этого, изменив a:off
только в группе, не посещая и не обновляя каждую из дочерних позиций фигуры.