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

如何在MDDataTable的on_row_press事件中获取行指定列的值?

KivyMD MDDataTable点击行任意位置获取指定列值实现方案

这个需求完全可以实现,核心逻辑是通过点击单元格的全局索引计算所属行号,再从表格的原始行数据中读取指定列的数值即可。

实现原理

  • on_row_press事件返回的instance_row对象自带index属性,代表当前点击的单元格在整个表格所有单元格中的全局排序索引,按行从左到右、从上到下从0开始计数
  • 表格的总列数可以通过len(instance_table.column_data)直接获取
  • 行号计算公式:当前行号 = instance_row.index // 总列数(整数除法)
  • 拿到行号后直接从instance_table.row_data中读取对应行的指定列值即可,你需要的ID列是第0列,直接取下标为0的元素即可

修改后的可运行代码

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

class TestApp(MDApp):
    def build(self):
        mddatatable = MDDataTable(
            pos_hint={'center_x': 0.5, 'center_y': 0.5},
            size_hint=(1, 1),
            check=False,
            use_pagination=True,
            rows_num=10,
            column_data=[
                ("ID", dp(5)),
                ("Description", dp(30)),
                ("Value", dp(10))
            ],
            row_data=[
                ("1", "Description One Here", "$100"),
                ("2", "Description Two Here", "$200"),
                ("3", "Description Three Here", "$300")
            ]
        )
        mddatatable.bind(on_row_press=self.print_id)
        return mddatatable

    def print_id(self, instance_table, instance_row):
        # 计算总列数
        col_count = len(instance_table.column_data)
        # 计算当前行号
        row_index = instance_row.index // col_count
        # 读取当前行第0列(ID列)的值
        target_value = instance_table.row_data[row_index][0]
        print(target_value)

TestApp().run()

效果验证

运行上述代码后,点击任意行的任意单元格,都会输出该行对应的ID列数值,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:06:05