MDLabel 的 Adaptive_width 属性无法正常工作
Posted
技术标签:
【中文标题】MDLabel 的 Adaptive_width 属性无法正常工作【英文标题】:Adaptive_width property of MDLabel is not working correctly 【发布时间】:2021-11-14 06:55:51 【问题描述】:我正在使用 kivy & kivymd 制作应用程序,其中一部分我希望标签占用与实际文本一样多的空间。
这对于 kivy 本身来说似乎很简单,但由于某种原因,MDLabel
类没有任何作用。我尝试将adaptive_width
属性设置为True
,我还尝试将width
直接设置为texture_size[0]
属性,但它们都不起作用(是的,我直接从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()
这是我的结果:
【问题讨论】:
【参考方案1】:我不相信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
【讨论】:
谢谢,这行得通,但是,如果你将这个 (on_parent: print([item for item in dir(self) if 'adaptive_' in item])
) 应用到任何 MDLabel
实例,你会看到它们之间有自适应宽度 ID,但由于某种原因它不起作用.以上是关于MDLabel 的 Adaptive_width 属性无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章