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

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>

请问我哪里出错了?(这是我第一次提问,若有信息遗漏请见谅)


问题原因及解决方法

  1. 直接报错原因:KivyMD组件名称大小写错误。你在kv文件里写的MDlabel是错误的,正确的组件名称是MDLabel(最后一个字母L大写)。Kivy/KivyMD对组件类名的大小写严格区分,写错就会被识别为未知类。

  2. 额外潜在问题:

    • 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不符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:35:17