如何动态更改 MDDataTable 值

Posted

技术标签:

【中文标题】如何动态更改 MDDataTable 值【英文标题】:How to Dynamically Change MDDataTable Values 【发布时间】:2020-12-12 10:28:28 【问题描述】:
    from kivy.metrics import dp
    from kivy.clock import Clock
    from kivymd.app import MDApp
    from kivymd.uix.datatables import MDDataTable

    from kivy.lang import Builder
    from kivy.core.window import Window
    Window.size = (1920, 1080)
    KV = '''

FloatLayout:
    MDRaisedButton:
        text: "Strategies Using Date Only"
        pos_hint: 'center_x': .5, 'center_y': .10
        on_release : app.create_table()
        elevation: 12

    MDCard:
        id: card   
        size_hint: None, None
        size: "1000dp", "1000dp"
        pos_hint: "center_x": .5, "center_y": .8
        ripple_behavior: True
        elevation: 12


'''


class Example(MDApp):
    r_data = [('3100','20.5')]
    c_data = [('Strike Price',dp(30)),('Price',dp(30))]
    i = 0
    def build(self):
        return Builder.load_string(KV)

    def on_start(self):
        Clock.schedule_interval(self.update_table,0.5)
        

    def on_row_press(self, instance_table, instance_row):
        '''Called when a table row is clicked.'''

        print(instance_table, instance_row)

    def on_check_press(self, instance_table, current_row):
        '''Called when the check box in the table row is checked.'''

        print(instance_table, current_row)

    
    
    def create_table(self):
        self.data_tables = MDDataTable(
            id = 'table',
            size_hint=(0.9, 0.6),
            use_pagination=True,
            check=True,
            column_data=self.c_data,
            row_data=self.r_data,
        )
        self.data_tables.bind(on_row_press=self.on_row_press)
        self.data_tables.bind(on_check_press=self.on_check_press)
        self.root.ids.card.add_widget(self.data_tables)
    
    def update_table(self, *args):
        
        self.r_data = [(str(3100+self.i),str(20.5+self.i))]
        self.i += 1
        try:
            self.root.ids.card.clear_widgets()
            self.create_table()
        except:
            pass

        

Example().run()

我正在使用此代码来更改数据表的行值。但是,我无法选中该行。还有另一种方法可以做到这一点吗? 基本上,我正在尝试为hft 数据制作数据表,并且我想在运行时修改数据表。截图如下:

有人可以帮我吗?提前致谢!

【问题讨论】:

【参考方案1】:

截至目前,在 KivyMD 的最新稳定版本 0.104.1 中,这还不可能。

您还可以在数据表文档页面上看到此警告消息。

“警告

数据表还远非完美。可能存在错误,我们希望您告知我们。”

【讨论】:

以上是关于如何动态更改 MDDataTable 值的主要内容,如果未能解决你的问题,请参考以下文章

如何在另一个屏幕上制作 MDDataTable?

如何修复 Kivymd MDDataTable python3 的“内联错误”

Kivymd MDDataTable 执行失败

.kv 文件中的 MDDataTable

如何根据从外部传递的更改值动态更改自定义小部件中成员的值

如何在反应 js 代码中动态更改 css 选择器属性值?