请教python-pptx中auto fit size设置为啥无效

请教 大 衤申,python-pptx中的SHAPE_TO_FIT_TEXT不能扩展text_frame的高度吗?但像这样设置后,tf.height还是丝毫未变,不管是框大于文字,还是文字大于框,都不变,只有到ppt中手动点设置才会变。
不知这个pptx库能取得文本框真正的高度吗?需要获得文字的位置,在底下添加其他内容。谢谢!

tf.wrap = True
tf.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT

该回答引用ChatGPT

在 python-pptx 中,使用 tf.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT 会自动调整文本框的宽度和高度,以适应文本的大小。但是,该属性的调整只会影响到文本框的高度,不会改变文本框的实际高度值。因此,如果您需要获取文本框的实际高度值,可以使用 tf.height 来获取文本框的高度值。但是,请注意,tf.height 的值不会随着文本框的大小而变化,只会返回初始文本框的高度值。

如果您想要在底部添加其他内容,可以计算文本框的实际高度,然后添加其他形状或文本框,使它们出现在文本框下方。您可以使用以下代码获取文本框的实际高度:

from pptx.util import Pt

获取文本框的实际高度

actual_height = tf.height - tf.margin_top - tf.margin_bottom - tf.line_spacing
在这个示例中,我们从文本框的 height 属性中减去 margin_top、margin_bottom 和 line_spacing 属性的值,以获取文本框的实际高度。

请注意,margin_top 和 margin_bottom 属性表示文本框的顶部和底部边框与文本之间的距离,line_spacing 表示行间距。因此,actual_height 的值将是文本框中文本实际占据的高度。

在获取到文本框的实际高度之后,您可以创建其他形状或文本框,并将它们的位置设置为文本框的底部位置。您可以使用以下代码将其他形状或文本框添加到幻灯片中:

from pptx.shapes.autoshape import Shape
from pptx.util import Inches


# 创建一个形状并设置位置
other_shape = slide.shapes.add_shape(
    MSO_SHAPE.RECTANGLE, left=left, top=tf.top + Pt(actual_height) + Inches(0.1),
    width=Inches(1), height=Inches(1)
)

# 添加文本到形状中
other_shape.text = "Other content"

在这个示例中,我们使用 slide.shapes.add_shape() 方法创建一个矩形形状,并将其位置设置为文本框的底部。您可以使用 other_shape.text 属性将文本添加到该形状中。

请注意,在将其他形状添加到幻灯片中时,需要指定形状的位置和大小。您可以使用 Inches() 函数来指定形状的大小,该函数将英寸单位转换为磅单位。如果您需要使用其他单位,请使用适当的转换函数。

抱歉,写错了,tf没有tf.height,只有shape有height参数,而tf.height - tf.margin_top - tf.margin_bottom - tf.paragraphs.line_spacing,这个好像不行有的是shape的属性,有的是para的属性呢。

可否再问一下:
python-pptx中的SHAPE_TO_FIT_TEXT不能扩展text_frame的高度吗?但像这样设置后,文本框或者placeholder的高度都还是不会变化。shape.height也同样丝毫未变,不管是框大于文字,还是文字大于框,都不变,只有到ppt中手动点设置才会变。
不知这个pptx库能取得文本框真正的高度吗?需要获得文字底边的位置,在底下添加其他内容。谢谢!
tf.wrap = True
tf.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT