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

KivyMD中ILeftBodyTouch多组件实现:列表项同时放置复选框与图标

解决方案

默认OneLineAvatarIconListItem的左侧容器宽度固定,且文本位置没有适配左侧容器宽度,才会出现内容重叠、多组件无法正常展示的问题,调整KV布局规则即可实现需求:

完整可运行代码

from kivy.lang import Builder
from kivymd.uix.list import OneLineAvatarIconListItem
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
#:import dp kivy.metrics.dp
<MDCheckbox>:
    size_hint: None, None
    size: "48dp", "48dp"

<LeftContainer@ILeftBodyTouch+MDBoxLayout>:
    adaptive_width: True
    spacing: dp(4)
    MDCheckbox:
    MDIconButton:
        icon: "account"
        size_hint: None, None
        size: "48dp", "48dp"

<OneLineLeftAdaptiveListItem@OneLineAvatarIconListItem>:
    # 让原生左侧容器自适应宽度
    _left_container:
        adaptive_width: True
    # 调整文本位置避免和左侧组件重叠
    _txt_head:
        x: self.parent.ids._left_container.width + dp(16)

    LeftContainer:

MDList:
    OneLineLeftAdaptiveListItem:
        text: "First"
    OneLineLeftAdaptiveListItem:
        text: "Second"
    OneLineLeftAdaptiveListItem:
        text: "Third"
''')

    def build(self):
        return self.kv


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

关键修改说明

  • 给自定义左侧容器LeftContainer添加间距,避免两个组件挤在一起
  • 移除原代码中错误的on_size宽度计算逻辑,直接给列表项原生左侧容器_left_container设置自适应宽度
  • 调整列表项文本的左侧偏移量,避免文本和左侧交互组件重叠
  • 继承ILeftBodyTouch保证容器内所有交互组件(复选框、图标按钮)都能正常响应触摸操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:09:01