Adaptive_width 属性 的 MDLabel 无法正常工作

Adaptive_width property of MDLabel is not working correctly

我正在使用 kivy 和 kivymd 制作一个应用程序,在其中一部分,我希望标签与实际文本一样多 space。

这对于 kivy 本身来说似乎非常简单,但由于某种原因,MDLabel class 没有任何效果。我尝试将 adaptive_width 属性 设置为 True 我也尝试直接将 width 设置为 texture_size[0] 属性 但是 none 他们工作(是的,我直接从 github 安装了 kivymd)。

这是我的代码:

from kivy.lang import Builder
from kivymd.app import MDApp


class MainApp(MDApp):
    def __init__(self, **kwargs):
        super(MainApp, self).__init__(**kwargs)
        self.kv = Builder.load_string('''
#:kivy 2.0.0
BoxLayout:
    MDLabel:
        text: "Supposedly adaptive width (KivyMD)"
        font_size: "21sp"
        halign: "center"
        adaptive_width: True
        # I also tried directly setting the width to the texture_size but the results were worse
        # size_hint_x: None
        # width: self.texture_size[0]
        canvas.before:
            Color:
                rgba: .8, .1, .2, .5
            Rectangle:
                pos: self.pos
                size: self.size
    Widget:
    MDSeparator:
        orientation: "vertical"
    Widget:
    Label:
        text: "Actual adaptive width (Standard Kivy)"
        font_size: "21sp"
        color: 0, 0, 0, 1
        size_hint_x: None
        width: self.texture_size[0]
        canvas.before:
            Color:
                rgba: 0, .6, .2, .5
            Rectangle:
                pos: self.pos
                size: self.size
''')

    def build(self):
        return self.kv


if __name__ == '__main__':
    MainApp().run()

这是我的结果:

我不相信 MDLabel 支持 adaptive_width 属性。在使用 width: self.texture_size[0] 时,似乎还必须将 text_size: None, None 添加到 MDLabel 中,而且它在 kv 中的位置似乎很重要。这是您的 kv 的一部分似乎有效的版本:

BoxLayout:
    MDLabel:
        text: "Supposedly adaptive width (KivyMD)"
        font_size: "21sp"
        halign: "center"
        # adaptive_width: True
        # I also tried directly setting the width to the texture_size but the results were worse
        size_hint_x: None
        width: self.texture_size[0]
        text_size: None, None  # added, and must be in this location
        canvas.before:
            Color:
                rgba: .8, .1, .2, .5
            Rectangle:
                pos: self.pos
                size: self.size