I'm relatively new to the python-pptx package but I'm finding it very useful.
I've added a slide with the "title and picture and caption" layout.
SLD_LAYOUT_TITLE_AND_PICTURE_AND_CAPTION = 8
prs = Presentation(output_pptx_fp)
slide_layout = prs.slide_layouts[SLD_LAYOUT_TITLE_AND_PICTURE_AND_CAPTION]
slide = prs.slides.add_slide(slide_layout)
shapes = slide.shapes
placeholder_pict = slide.placeholders[1] # idx key, not position
placeholder_pict.insert_picture(img_path)
I'm trying to figure out how to reposition the picture placeholder.
By analogy to how I position the title placeholder on the slide, I've tried using:
placeholder_pict.left = Inches(1.96)
placeholder_pict.top = Inches(0.0)
However, this generated an AttributeError.
I've also tried using "left" and "top" arguments to the "insert_picture()" method:
left = Inches(1.96)
top = Inches(0.0)
placeholder_pict.insert_picture(img_path, left, top)
This generated a "TypeError: insert_picture() takes 2 positional arguments but 4 were given"
How do I reposition the picture placeholder on this slide? Did I miss something in the documentation?
UPDATE:
When I try (which is something scanny didn't suggest but I was curious):
picture_left = Inches(1.96)
picture_top = Inches(0.0)
picture = placeholder_pict.insert_picture(img_path, picture_left, picture_top)
I get: "TypeError: insert_picture() takes 2 positional arguments but 4 were given"
When I try (which I believe was scanny's first suggestion):
picture_left = Inches(1.96)
picture_top = Inches(0.0)
shapes.add_picture(img_path, picture_left, picture_top)
the picture is positioned where I want it but it's not in the picture container (which I can live with) and so it's not sized to fit in the picture container (which I can deal with by adding code)
When I try (which I believe was scanny's second suggestion):
picture_left = Inches(0.0)
picture_top = Inches(0.0)
placeholder_pict.left = picture_left
placeholder_pict.top = picture_top
picture = placeholder_pict.insert_picture(img_path)
I get no change. The picture appears on the slide but it's in the same position as when I don't try setting placeholder_pict.left and placeholder_pict.top at all.
When I try (which I believe was scanny's third suggestion):
picture = placeholder_pict.insert_picture(img_path)
picture.left = Inches(0)
picture.top = Inches(0)
I get no picture at all. I've tried zooming out, to see if the picture might have been placed "off the slide" but still no sign of a picture. As far as I can tell, I no longer even have the picture container.
When I try (per scanny's request):
placeholder_pict = slide.placeholders[1] # idx key, not position
print("placeholder_pict.placeholder_format.type =", placeholder_pict.placeholder_format.type)
print("placeholder_pict.left", placeholder_pict.left, "placeholder_pict.top =", placeholder_pict.top)
I get:
placeholder_pict.placeholder_format.type = PICTURE (18)
placeholder_pict.left 1792288 placeholder_pict.top = 612775
This makes me very puzzled about why I apparently can't successfuly set the placeholder_pict.left and placeholder_pict.top values.