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
相关产品推荐
相关产品推荐

