假设您有如下设置:
ScrollView:
size_hint: (1, 0.5)
Label:
size_hint: (1, None)
Run Code Online (Sandbox Code Playgroud)
最初,Label没有内容/文本.如果我理解正确,在创建对象时,Label的高度为None.
运行应用程序时,Label的text属性设置为多行文本,这应该将Label的内容推送到ScrollView的边界之外.但是,对于滚动发生,似乎必须动态调整Label的y维度/高度.
根据Label的新内容动态调整Label高度的最佳方法是什么,以便可以进行滚动操作?
实际文本显示在Rectangle中,默认情况下其大小未与Label大小相关联.当文本量很大时,它会变大并且可能超出Label边界,但不会调整标签大小.
控制显示文本实际大小的相关属性是Label.text_size.要获得所需的行为,您可以简单地执行以下操作:
ScrollView:
size_hint: (1, 0.5)
Label:
size_hint: (1, None)
height: self.text_size[1]
Run Code Online (Sandbox Code Playgroud)
这会绑定标签的高度以跟踪显示文本的高度,因此应该为您提供所需的行为.
作为旁注,改变或观看通常很有用text_size.例如,要使文本换行位于Label的边缘而不是依赖于手动换行,您可以设置text_size: self.size哪个文本将在其宽度超出标签宽度时自动换行.如果使用halign或valign来控制文本中的文本位置而不是标签本身,这也很重要- 除非你手动将text_size设置为(再次)大于实际文本的空间,否则这些属性将没有可见效果占用.
编辑:根据您在下面的评论,这里是我的一个应用程序中的标签示例,如果文本的长度增加(因此用户可以滚动),它会垂直增长,但是当文本的宽度大于标签时也会自动包装文本宽度.看起来我实际上是通过将Label放在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]
Run Code Online (Sandbox Code Playgroud)
您可以看到我使用text_size来控制文本边界框(因此它包裹在标签边缘),但绑定GridLayout高度以真正跟踪texture_size高度.GridLayout放在ScrollView中,我得到了我认为你想要的行为.
| 归档时间: |
|
| 查看次数: |
2060 次 |
| 最近记录: |