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

使用KivyMD MDChip组件报KeyError: 'pos_hint'错误如何解决

问题复现

使用KivyMD的MDChip组件开发时,运行代码抛出KeyError: 'pos_hint'错误,测试代码如下:

from kivy.lang import Builder
from kivymd.app import MDApp

class MyApp(MDApp):

    def build(self):

        return Builder.load_string(KV)

KV = '''

MDBoxLayout:
    pos_hint: {'center_y': 1, 'center_x':1}  
    
    MDChip:
        text: 'Google'
        icon: 'Google'
        check: True
'''

MyApp().run()

完整错误追踪栈:

Traceback (most recent call last):
   File "c:\Users\Kelvin Loh\Documents\kivyMD\chip_1.py", line 18, in <module>
     MyApp().run()
   File "C:\Users\Kelvin Loh\Documents\kivyMD\kivy_venv\lib\site-packages\kivy\app.py", line 949, in run
     self._run_prepare()
   File "C:\Users\Kelvin Loh\Documents\kivyMD\kivy_venv\lib\site-packages\kivy\app.py", line 919, in _run_prepare
     root = self.build()
   File "c:\Users\Kelvin Loh\Documents\kivyMD\chip_1.py", line 6, in build
     return Builder.load_string(KV)
   File "C:\Users\Kelvin Loh\Documents\kivyMD\kivy_venv\lib\site-packages\kivy\lang\builder.py", line 408, in load_string
     self._apply_rule(
   File "C:\Users\Kelvin Loh\Documents\kivyMD\kivy_venv\lib\site-packages\kivy\lang\builder.py", line 661, in _apply_rule
     child.apply_class_lang_rules(
   File "C:\Users\Kelvin Loh\Documents\kivyMD\kivy_venv\lib\site-packages\kivy\uix\widget.py", line 463, in apply_class_lang_rules
     Builder.apply(
   File "C:\Users\Kelvin Loh\Documents\kivyMD\kivy_venv\lib\site-packages\kivy\lang\builder.py", line 541, in apply
     self._apply_rule(
   File "C:\Users\Kelvin Loh\Documents\kivyMD\kivy_venv\lib\site-packages\kivy\lang\builder.py", line 663, in _apply_rule
     self._apply_rule(
   File "C:\Users\Kelvin Loh\Documents\kivyMD\kivy_venv\lib\site-packages\kivy\lang\builder.py", line 660, in _apply_rule
     widget.add_widget(child)
   File "C:\Users\Kelvin Loh\Documents\kivyMD\kivy_venv\lib\site-packages\kivy\uix\floatlayout.py", line 135, in add_widget
     widget.bind(
   File "kivy\_event.pyx", line 429, in kivy._event.EventDispatcher.bind
 KeyError: 'pos_hint'
报错原因
  • 根布局直接使用MDBoxLayout时,MDChip在开启check: True属性后会动态插入勾选标记组件,插入过程中会触发FloatLayout类布局的pos_hint绑定校验逻辑,MDBoxLayout不属于FloatLayout系布局,无法完成属性绑定直接抛错。
  • 代码中传入的icon值'Google'不符合KivyMD图标命名规范,Material图标名均为全小写格式,该问题不会触发本次的KeyError,但会导致图标加载失败。
修复方案

将根布局替换为FloatLayout系的MDScreen(KivyMD推荐作为页面根容器),同时修正图标名,给MDChip显式添加必要的布局属性即可,修复后可运行代码如下:

from kivy.lang import Builder
from kivymd.app import MDApp

class MyApp(MDApp):
    def build(self):
        return Builder.load_string(KV)

KV = '''
MDScreen:
    MDBoxLayout:
        pos_hint: {'center_y': 1, 'center_x': 1}
        adaptive_size: True
        spacing: "12dp"
        padding: "12dp"

        MDChip:
            text: 'Google'
            icon: 'google'
            check: True
            pos_hint: {"center_x": .5, "center_y": .5}
'''

MyApp().run()

如果需要保留MDBoxLayout作为最外层容器,只需要在MDBoxLayout外层包裹一层MDScreen即可,不需要改动原有MDBoxLayout的内部布局逻辑。

内容的提问来源于stack exchange,提问作者Loh Boon How

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:36:20