实际文本显示在一个矩形中,其大小为not默认情况下与标签尺寸耦合。当文本量很大时,文本会变大并可能超出标签边界,但不会调整标签大小。
控制显示文本的实际大小的相关属性是Label.text_size
。要获得您想要的行为,您可以简单地执行以下操作:
ScrollView:
size_hint: (1, 0.5)
Label:
size_hint: (1, None)
height: self.text_size[1]
这会绑定标签的高度以跟踪显示文本的高度,因此应该为您提供所需的行为。
作为旁注,更改或观看通常很有用text_size
。例如,要使文本在标签的边缘换行而不是依赖手动换行符,您可以设置text_size: self.size
这意味着如果文本宽度超过标签宽度,文本将自动换行。如果使用 halign 或 valign,这也很重要,它们控制其纹理中的文本位置,并且not在标签本身内 - 除非您手动将 text_size 设置为(再次)大于文本实际占用的空间,否则这些属性不会产生可见的效果。
编辑:根据您下面的评论,这是我的一个应用程序中的标签示例,如果文本长度增加,标签会垂直增长(以便用户可以滚动),但当文本宽度大于标签时,它也会自动换行宽度。看来我实际上是通过将标签放入 GridLayout 中来做到这一点的,我隐约记得出于某种原因这很重要。
GridLayout:
cols: 1
spacing: 10
size_hint_y: None
height: thetb.texture_size[1]
Label:
id: thetb
text: 'whatever'
text_size: self.width, None
size_hint: (1, None)
size: self.parent.width, self.texture_size[1]
您可以看到我使用 text_size 来控制文本边界框(因此它在标签边缘处环绕),但绑定 GridLayout 高度以真正跟踪texture_size 高度。 GridLayout 放置在 ScrollView 中,我得到的正是我认为您想要的行为。