如何在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
相关产品推荐
相关产品推荐

