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

KivyMD迁移样式至kv文件报AttributeError类名首字母小写问题求助

问题解决方法
  • 修正Builder调用方法
    你当前错误的核心原因是误用了Builder.load_string方法,这个方法的入参是KV代码的字符串内容,你传入文件名'mytodo.kv'时,程序会把这个文件名当成KV代码解析,误以为你要声明一个名为mytodo.kv的自定义组件类,而Kivy要求自定义类名首字母必须大写,所以抛出了对应报错。
    把build方法里的return Builder.load_string('mytodo.kv')改为return Builder.load_file('mytodo.kv')即可解决这个报错。

  • 修正KV文件结构
    Kivy的KV文件只能有一个根组件,你当前的KV文件直接写了三个平级的组件,加载后会出现布局异常,需要用一个容器组件包裹所有子组件,示例修改后的mytodo.kv代码如下:

MDBoxLayout:
    MDTextField:
        id: textfield
        hint_text: 'Add Task'
        font_size: 15
        required: True
        pos_hint: {'center_x': 0.2, 'center_y': 0.1}
        size_hint: 0.35, 0.15
        multiline: True

    MDFloatingActionButtonSpeedDial:
        data: {'Top Priority': 'priority-high', 'Low Priority': 'priority-low', 'Accomplished': 'check'}
        rotation_root_button: True
        callback: app.call

    MDFloatingActionButton:
        icon: 'priority-high'
        pos_hint: {"center_x": .2, "center_y": .9}
        size_hint_x: None
        width: 200
  • 可选优化:KV文件自动加载
    Kivy支持KV文件自动加载规则:如果你的App类名以App结尾,Kivy会自动加载和类名前缀同名的小写KV文件。你可以将MyToDo类改名为MyToDoApp,此时不需要手动调用Builder加载文件,Kivy会自动识别根目录下的mytodo.kv加载,build方法可以简化为:
def build(self):
    self.theme_cls.theme_style = "Dark"
    self.theme_cls.primary_palette = "Amber"
    self.theme_cls.primary_hue = "A700"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:36:03