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
我正在使用 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