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

Kivy Python3报错:'super'对象无'__getattr__'及KeyError:'container'

解决MDDataTable的KeyError: 'container'和AttributeError问题

错误原因

  • row_data格式不合法:MDDataTable要求row_data的每个元素是与列数匹配的元组。你当前的row_data中,('data1')不是元组(只是字符串,正确单元素元组需写成('data1',)),且3列的表格每行必须提供3个值才能完成列映射,格式错误会触发内部渲染异常。
  • 子类未正确初始化父类:继承MDDataTable后,你没有调用父类的__init__方法,导致MDDataTable内部的container等核心组件未被创建,进而引发KeyError和后续的AttributeError。

解决方案

以下两种方式任选其一即可:

方式一:直接使用MDDataTable实例(无需自定义子类)

修改Python代码和kv文件,直接传入格式正确的参数:

Python代码:

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

class app(MDApp):
    def build(self):
        return Builder.load_file('lab.kv')

app().run()

kv文件(lab.kv):

BoxLayout:
    MDDataTable:
        id: datatable
        column_data: [('col1', dp(30)), ('col2', dp(30)), ('col3', dp(30))]
        row_data: [
            ('data1', 'data2', 'data3'),
            ('data4', 'data5', 'data6'),
            ('data7', 'data8', 'data9')
        ]

方式二:正确自定义MDDataTable子类

若需保留自定义子类,必须在子类的__init__中调用父类初始化方法,并传入合法参数:

Python代码:

from kivymd.app import MDApp
from kivy.lang import Builder
from kivymd.uix.datatables import MDDataTable
from kivy.metrics import dp

class Datatable(MDDataTable):
    def __init__(self, **kwargs):
        column_data = [('col1', dp(30)), ('col2', dp(30)), ('col3', dp(30))]
        row_data = [
            ('data1', 'data2', 'data3'),
            ('data4', 'data5', 'data6'),
            ('data7', 'data8', 'data9')
        ]
        # 调用父类初始化,传入必要参数
        super().__init__(column_data=column_data, row_data=row_data, **kwargs)

class app(MDApp):
    def build(self):
        return Builder.load_file('lab.kv')

app().run()

kv文件保持不变:

BoxLayout:
    Datatable:
        id:datatable

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:13:19