KivyMD中MDFloatingActionButtonSpeedDial回调及MDLabel报错求助
问题求助:Kivy框架运行报错
我正在学习Python的Kivy框架,多次尝试仍无法解决当前问题,请求帮助。注:这不是主MDApp(Records(MDApp))类,而是ScreenManager中的Screen类,不确定是否因此引发问题。
Python代码
class Hall_of_Fame(Screen): def call(self, instance): if instance.icon=='pen-plus': current_win= 'Add_Record' elif instance.icon== 'archive-edit': current_win= 'Edit_Record' self.manager.current = current_win
Kivy文件片段
<Hall_of_Fame>: name:'Hall_of_Fame' MDlabel: text: 'landed' size: 34 <Match>: id: Match name: 'Match' MDBoxLayout: orientation: "vertical" MDScreen: MDFloatingActionButtonSpeedDial: data: root.data_dic root_button_anim: True callback: app.call
终端错误输出
Traceback (most recent call last): File "c:\Users\Downloads\RECO\Main.py", line 90, in <module> Records().run() File "C:\Users\AppData\Local\Programs\Python\Python311\Lib\site-packages\kivy\app.py", line 955, in run self._run_prepare() File "C:\Users\AppData\Local\Programs\Python\Python311\Lib\site-packages\kivy\app.py", line 925, in _run_prepare root = self.build() ^^^^^^^^^^^^ File "c:\Users\Downloads\RECO\Main.py", line 84, in build kiv = Builder.load_file('layout.kv') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\AppData\Local\Programs\Python\Python311\Lib\site-packages\kivy\lang\builder.py", line 305, in load_file return self.load_string(data, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\AppData\Local\Programs\Python\Python311\Lib\site-packages\kivy\lang\builder.py", line 407, in load_string self._apply_rule( File "C:\Users\AppData\Local\Programs\Python\Python311\Lib\site-packages\kivy\lang\builder.py", line 660, in _apply_rule child.apply_class_lang_rules( File "C:\Users\AppData\Local\Programs\Python\Python311\Lib\site-packages\kivy\uix\widget.py", line 470, in apply_class_lang_rules Builder.apply( File "C:\Users\AppData\Local\Programs\Python\Python311\Lib\site-packages\kivy\lang\builder.py", line 540, in apply self._apply_rule( File "C:\Users\AppData\Local\Programs\Python\Python311\Lib\site-packages\kivy\lang\builder.py", line 620, in _apply_rule cls = Factory_get(cname) ^^^^^^^^^^^^^^^^^^ File "C:\Users\AppData\Local\Programs\Python\Python311\Lib\site-packages\kivy\factory.py", line 147, in __getattr__ raise FactoryException('Unknown class <%s>' % name) kivy.factory.FactoryException: Unknown class <MDlabel>
请问我哪里出错了?(这是我第一次提问,若有信息遗漏请见谅)
问题原因及解决方法
直接报错原因:KivyMD组件名称大小写错误。你在kv文件里写的
MDlabel是错误的,正确的组件名称是MDLabel(最后一个字母L大写)。Kivy/KivyMD对组件类名的大小写严格区分,写错就会被识别为未知类。额外潜在问题:
- kv文件中
Match屏幕里的callback: app.call存在问题:你的call方法定义在Hall_of_Fame这个Screen类中,并非主App类,所以app.call找不到对应方法,后续运行会触发新错误。可以改成root.manager.get_screen('Hall_of_Fame').call,或者把call方法移到主App类中,也可以调整为当前屏幕可访问的方法。 MDLabel的size属性不适合直接设置单个数值,建议用font_size: 34来设置文字大小;size是控件自身的尺寸,正确格式应为(width, height)的元组,单独写34不符合要求。
- kv文件中
内容的提问来源于stack exchange,提问作者Utsav Jana
相关产品推荐
相关产品推荐

