在数据 table Kivy/KivyMD 中动态添加一行

Dynamically adding a row in data table Kivy/KivyMD

例如,我有一个空数据 table(只有列数据)和一个按钮。我想在按下按钮时动态添加行数据。有可能吗?

是也不是。正如 here 所讨论的那样,小部件 MDDataTable 本身不允许将数据动态添加到 table。 尽管如此,可以通过使用新数据创建新的 table 并显示它来轻松规避这一点。它可能会变得繁重,但对于较小的 tables 它工作得很好。

我用 kivy 2.0.0 和 kivymd 0.104.1 做了一个例子:

from kivy.metrics import dp
from kivy.uix.button import Button
from kivymd.app import MDApp
from kivymd.uix.datatables import MDDataTable

class Example(MDApp):

    def build(self):
        self.i = 0
        self.rowData = ["Row. No."]
        self.button = Button(text="AddRow", size_hint_y=None, pos_hint={"bottom": 0})
        self.button.bind(texture_size=self.button.setter('size'))
        self.data_tables = None
        self.set_table(self.rowData)

    def set_table(self, data):
        if self.data_tables:
            self.data_tables.ids.container.remove_widget(self.button)

        self.data_tables = MDDataTable(size_hint=(0.9, 0.6), use_pagination=True, check=True,
                                       column_data=[("No.", dp(30))], row_data=[self.rowData])

        self.data_tables.ids.container.add_widget(self.button)

    def on_start(self):
        self.data_tables.open()
        self.button.bind(on_press=lambda x: self.addrow())

    def addrow(self):
        self.data_tables.dismiss(animation=False)
        self.i += 1
        self.set_table(self.rowData.append("Row {}".format(self.i)))
        self.data_tables.open(animation=False)


if __name__ == '__main__':
    Example().run()

注意:虽然运行这段代码我运行出错了:

ValueError: TableRecycleGridLayout.orientation is set to an invalid option 'vertical'. Must be one of: ['lr-tb', 'tb-lr', 'rl-tb', 'tb-rl', 'lr-bt', 'bt-lr', 'rl-bt', 'bt-rl']

这是一个已知的不兼容问题。要解决它,只需按照here

中的说明进行操作

AttributeError: 'MDDataTable' 对象没有属性 'open'