快速返回kivy MDDataTable并返回NoneType

时间:2020-09-15 09:39:29

标签: python python-3.x inheritance kivy kivymd

我试图在我的应用程序中使用MDDataTable,就像我使用ModalViews一样。那就是我在单独的indexui kivy文件中声明布局,例如

<MyDataTable>
    id: table1
    size_hint: [0.94, 0.8]
    use_pagination: True    

在单独的indexui python文件中,我声明了一个从MDDataTable继承的空类

class MyDataTable(MDDataTable):
    pass

在main.py文件中,我使用from views.indexui import MyDataTable导入数据表,并通过在主table = ObjectProperty(MyDataTable())类中声明实例App来尝试访问该对象。通过这种声明方法,我应该能够使用self.table.column_data = ['my data', 'my data']self.table.row_data = [('row1', dp(30)), ('row2', dp(30))]

我在运行该应用程序时收到以下错误: AttributeError: 'NoneType' object has no attribute 'property'

如果删除声明ObjectProperty(MyDataTable())的部分,则会收到以下错误: TypeError: argument of type 'module' is not iterable

有人可以给我一个提示错误原因的线索吗?

这里是最小的例子。当然,我使用实例的方式是在三个不同的Screens上创建数据表,具体取决于用户是否需要on_entry并删除它on_leave。另外,为了使示例最小化,我将所有内容都放在一个文件中。

from kivy.metrics import dp

from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import ObjectProperty
from kivymd.uix.datatables import MDDataTable

Builder.load_string('''
<MyDataTable>
    id: table1
    size_hint: [0.94, 0.8]
    use_pagination: True
<MyNewAppy>:
''')
class MyDataTable(MDDataTable):
    pass
class MyNewAppy(FloatLayout):
    pass

class Example(MDApp):
    table = ObjectProperty(MyDataTable())
    def build(self):
        return MyNewAppy()
    def on_start(self):
        self.table.column_data = [
                ("Column 1", dp(30)),
                ("Column 2", dp(30)),
                ("Column 3", dp(30)),
                ("Column 4", dp(30)),
                ("Column 5", dp(30)),
                ("Column 6", dp(30)),
            ]
        self.table.row_data = [
                ("1", "2", "3", "4", "5", "6"),
                ("1", "2", "3", "4", "5", "6"),
            ]
        self.table.open()
Example().run()

编辑: 如果我将table变量声明为None对象,并在MyDataTable()类中初始化on_start,则数据表将打开,但为空。

1 个答案:

答案 0 :(得分:1)

KivyMD小部件的常见缺陷(但未记录)是在创建小部件时必须提供这些属性。因此,我相信您的代码应如下所示:

arr