删除和读取小部件后的 KivyMD MDList 间距布局问题

Posted

技术标签:

【中文标题】删除和读取小部件后的 KivyMD MDList 间距布局问题【英文标题】:KivyMD MDList spacing layout problem after removing and readding widgets 【发布时间】:2021-04-18 09:27:14 【问题描述】:

我正在使用 KivyMD 构建一个应用程序。我有一个用 MDLabels 制作列表的函数。列表初始化后,我想用最新数据“刷新”列表。因此我使用 clear_widgets() 从列表中删除标签,然后用新数据重建列表。

问题在于,一旦重建列表,间距似乎会受到干扰。我已经尝试了很多东西,但我无法弄清楚这种情况的问题所在。

有人知道这里出了什么问题吗?我在下面复制了一个简单的例子。 非常感谢!

kivy 版本 = 2.0.0, kivymd 版本 = 0.104.1,python 3.7

main.py

from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.label import MDLabel

class MainApp(MDApp):
    def build(self):
        screen = Builder.load_file('kivy.kv')

        return screen

    def make_list(self):
        self.root.ids.button.text = 'Click me again'
        if self.root.ids.list.children:
            self.root.ids.list.clear_widgets()

        if not self.root.ids.list.children:
            for i in range(9):
                self.root.ids.list.add_widget(MDLabel(text='Label' + str(i)))


MainApp().run()

.kv 文件

Screen:
    BoxLayout:
        orientation: 'horizontal'

        FloatLayout:

            MDLabel:
                text: 'Click the button below for a list'
                halign: 'center'
                pos_hint: 'center_x': .5, 'center_y': .6

            MDFlatButton:
                id: button
                text: 'button'
                pos_hint: 'center_x': .5, 'center_y': .4
                on_release: app.make_list()

        FloatLayout:
            MDList:
                id: list
                spacing: 40
                pos_hint: 'center_x': .7, 'center_y': .6

【问题讨论】:

【参考方案1】:

很难理解MDListMDLabel 是如何计算它们的高度的,但是您可以通过指定每个MDLabelheight 来解决您的问题。一种方法是这样的:

self.root.ids.list.add_widget(MDLabel(text='Label' + str(i), size_hint_y=None, height=15))

【讨论】:

这解决了我的问题!非常感谢您的努力。

以上是关于删除和读取小部件后的 KivyMD MDList 间距布局问题的主要内容,如果未能解决你的问题,请参考以下文章

更改 OneLineListItem MDList 的 font_name

如何将 MDDropdownMenu 放在 KivyMD 中的 MDlist 项目上?

如何在 kivyMD 的 MDDialog 中插入 MDList?

第一个 Python/Kivy/KivyMD 应用程序。无法将文本字段中的数据保存到变量 + 数据绑定到 MDList

在 KivyMD 中动态隐藏和显示小部件

Kivy (KivyMD) 中的按钮和小部件大小