Атрибуты .top
и .left
формы представляют расстояние от верхнего левого угла слайда до верхнего левого угла фигуры.Ваша идея о том, что положение фигуры относительно центра фигуры ошибочна.
Если у вас есть текстовое кровотечение с левой стороны вашей фигуры, я бы начал с проверки настройки Paragraph.alignment
для каждого абзаца в текстовом фрейме формы:
from pptx.enum.text import PP_ALIGN
for paragraph in shape.text_frame.paragraphs:
paragraph.alignment = PP_ALIGN.LEFT
Если абзац выравнивается вправо , текст будет расти влево.
Еще один фактор, который можетОтносится к этому поведению настройка TextFrame.word_wrap
.Если перенос по словам отключен, текст может кровоточить за пределами горизонтальных границ фигуры.
shape.text_frame.word_wrap = True
Наконец, поведение фигуры TextFrame.auto_size
может вызвать перемещение фигуры.в частности, когда выбран параметр «Изменить размер по размеру текста» , один или несколько атрибутов размера или положения изменяются для соответствия.Обратите внимание, что этот параметр может взаимодействовать с параметром выравнивания абзаца при выборе стороны, которая должна «растягивать» фигуру, чтобы она соответствовала тексту.
from pptx.enum.text import MSO_AUTO_SIZE
shape.text_frame.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT
Возможно, вам придется поэкспериментировать, чтобы найти комбинацию, которая дает желаемое поведение,Я бы сказал, что самое безопасное место для начала это:
from pptx.enum.text import MSO_AUTO_SIZE
from pptx.enum.text import PP_ALIGN
shape = slide.shapes.add_textbox(Inches(1), top, width, height)
text_frame = shape.text_frame
text_frame.text = 'Text I want to appear in text-box'
text_frame.auto_size = MSO_AUTO_SIZE.NONE
text_frame.word_wrap = False
for paragraph in text_frame.paragraphs:
paragraph.alignment = PP_ALIGN.LEFT
Также обратите внимание, что поведение с авторазмером может слегка отличаться в LibreOffice, чем в Microsoft PowerPoint.Это не будет иметь место в вышеупомянутом «безопасном» варианте, но нужно помнить.