You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Kivy为OneLineAvatarListItem添加Label仅最后一项生效问题

问题原因
  • OneLineAvatarListItem是KivyMD封装好的列表组件,内部自带用于显示文本的Label实例,1.x版本的KivyMD中该实例存储在组件的ids._lbl_primary属性中。你额外新增的自定义Label没有设置布局约束,所有新增Label都默认渲染在父组件的左上角区域,重叠后自然只有最后一个添加的Label可见。
  • 你给OneLineAvatarListItem传入的text参数会自动绑定到内部自带的Label上,和你额外新增的Label无关,相当于每个列表项同时渲染了两个重叠的文本,只有最上层的最后一个自定义Label能正常显示。
解决方案

不需要额外新增Label,直接修改组件内部自带Label的属性即可实现字体自定义,修改后的完整代码如下:

from kivymd.app import MDApp
from kivymd.uix.screen import Screen
from kivy.uix.scrollview import ScrollView
from kivymd.uix.list import MDList, OneLineAvatarListItem

class DemoApp(MDApp):
    def build(self):
        screen = Screen()
        scroll = ScrollView()
        list_view = MDList()
        scroll.add_widget(list_view)
        data = ['dog', 'cat']
        for i in data:
            items = OneLineAvatarListItem()
            # 直接修改内部文本Label的属性
            items.ids._lbl_primary.text = i
            items.ids._lbl_primary.font_name = 'bebas-neue-bold'
            items.ids._lbl_primary.color = [.1, .1, .1, 1]
            list_view.add_widget(items)
        screen.add_widget(scroll)
        return screen

DemoApp().run()

如果需要批量使用自定义字体的列表项,可以直接封装自定义组件,后续使用时直接传text参数即可:

from kivymd.app import MDApp
from kivymd.uix.screen import Screen
from kivy.uix.scrollview import ScrollView
from kivymd.uix.list import MDList, OneLineAvatarListItem
from kivy.lang import Builder

# 注册自定义组件样式
Builder.load_string('''
<CustomOneLineAvatarListItem>:
    _lbl_primary:
        font_name: 'bebas-neue-bold'
        color: .1, .1, .1, 1
''')

class CustomOneLineAvatarListItem(OneLineAvatarListItem):
    pass

class DemoApp(MDApp):
    def build(self):
        screen = Screen()
        scroll = ScrollView()
        list_view = MDList()
        scroll.add_widget(list_view)
        data = ['dog', 'cat']
        for i in data:
            items = CustomOneLineAvatarListItem(text=i)
            list_view.add_widget(items)
        screen.add_widget(scroll)
        return screen

DemoApp().run()

内容的提问来源于stack exchange,提问作者KryptonH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:15:05