gpt4 book ai didi

kivy - 在 ScrollView 中动态调整标签的大小?

转载 作者:行者123 更新时间:2023-12-05 00:27:48 26 4
gpt4 key购买 nike

假设您有如下设置:

ScrollView:
size_hint: (1, 0.5)

Label:
size_hint: (1, None)

最初,标签没有内容/文本。如果我理解正确,创建对象时,标签的高度是 None .

当应用程序运行时,标签的 text属性设置为多行文本,这应该将 Label 的内容推送到 ScrollView 的边界之外。但是,为了发生滚动,标签的 y 尺寸/高度似乎必须动态调整大小。

根据标签的新内容动态调整标签高度以使滚动 Action 发生的最佳方法是什么?

最佳答案

实际文本显示在 Rectangle 中,默认情况下其大小与 Label 大小不相关。当文本量很大时,它会变大并且可能超出标签边界,但不会调整标签大小。

控制显示文本实际大小的相关属性是Label.text_size .要获得您想要的行为,您可以简单地执行以下操作:

ScrollView:
size_hint: (1, 0.5)

Label:
size_hint: (1, None)
height: self.text_size[1]

这将标签的高度绑定(bind)到跟踪显示文本的高度,因此应该为您提供所需的行为。

附带说明一下,更改或观看 text_size 通常很有用。 .例如,要使文本在标签的边缘换行而不是依靠手动换行,您可以设置 text_size: self.size这意味着如果文本的宽度超过标签宽度,文本将自动换行。如果使用 halign 或 valign,这也很重要,它们控制文本在其纹理内而不是在标签本身内的位置 - 除非您手动将 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 来控制文本边界框(因此它在标签边缘处环绕),但绑定(bind) GridLayout 高度以真正跟踪 texture_size 高度。 GridLayout 放置在 ScrollView 中,我得到了我认为你想要的行为。

关于kivy - 在 ScrollView 中动态调整标签的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19932614/

26 4 0