如何获取带有随机文本的标签的高度 --kivymd

How to get the height of a label with random text --kivymd

我想获得 size_hint 设置为 (1,None) 的标签的高度。这对我来说很重要。我实际上想用它更新 boxlayout 的高度。所以感谢任何帮助。

from kivymd.uix.label import MDLabel
from kivymd.app import MDApp
from kivy.uix.boxlayout import BoxLayout

class Label_(MDApp):
    def build(self):
        box = BoxLayout(size_hint = (1,None) , orientation = 'vertical')
        box.height = 0
        lbl = MDLabel(text = """A delivery truck takes 4.5 rosehorums to get from its warehouse in Garden City to the customer in Floralville at a speed of 50 PPP (poppyomiscus per petuniaminium) and uses 10 cedariters of special Milorganine fuel during the trip.

How many pansyometers are travelled between warehouse and customer and what is the driverÂs fuel mileage in poppyomiscus per marigoldetum? """,
                      size_hint = (1,None)
                      )

        print(lbl.height , lbl.text_size , lbl.texture_size)
        
        box.add_widget(lbl)
        box.height += lbl.height

        return box

Label_().run()

此处高度固定为100,我认为是默认高度。 我试过使用 texture_size[1] , text_size[1] 但它没有用。

所以我其实想要实际高度。

只是不要关注标签的文字!!我是随便选的。

感谢任何帮助。

这里有多个问题。

您所拥有的是访问高度的正确方法。你遇到的一个问题是你不想要这个瞬时值,而是标签完成渲染后的一个值。

您遇到的另一个问题是标签高度始终为 100,因为您没有采取任何措施使其采用不同的值。

理想的解决方案是设置绑定以在它们的依赖关系发生变化时更新您想要的东西。 BoxLayout 有一个 minimum_height 属性 让这变得简单。你想要像 box.bind(minimum_height=self.setter('height')) 这样的东西,对于标签 lbl.bind(texture_size=lambda instance, (width, height): setattr(lbl, "height", height)) (或者在实践中不要使用单行 lambda,为它写一个函数,或者更好地使用自动设置它的 kv 语言。