【问题标题】:Kivy row data on click with MDDataTable使用 MDDataTable 单击时的 Kivy 行数据
【发布时间】:2021-10-04 23:43:13
【问题描述】:

我有一个 MDDataTable,它有一个 bind(on_row_press),我试图在其中返回该行的一个特定列,而不管它在哪里被点击。我在文档中找不到任何内容。这可能吗?

简单示例:

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):
        print(instance_row.text)

TestApp().run()

现在,如果您单击“此处的说明一”,它将输出“此处的说明一”。同样,如果您单击“$100”,它将输出“$100”。我正在寻找输出 ID 列,因此即使您单击第 1 行中的其他位置,它仍然会输出“1”。

【问题讨论】:

    标签: python kivy kivymd


    【解决方案1】:

    使用来自 master 分支的 KivyMD 库,而不是来自 PyPi。

    【讨论】:

      【解决方案2】:

      应该使用MDDataTable的方法,KivyMD对raw的item有自己的索引方式,例如:table[0][0]不代表第一行的第一个item,所以当你点击一行,你应该得到 KivyMD 为这一行指定的开始和结束索引,这里是一个循环遍历行项目的示例:

      def on_row_press(self,  table, row):
          # get start index from selected row item range
          start_index, end_index = row.table.recycle_data[row.index]["range"]
          print(start_index)
          print(end_index)
          # loop over selected row items
          for i in range(start_index, end_index):
              print(row.table.recycle_data[i]["text"])
      

      对于您的情况,假设“ID 列”是第二列,其对应值:

      row.table.recycle_data[start_index + 1]["text"]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-06
        • 2020-07-29
        • 1970-01-01
        • 1970-01-01
        • 2018-03-03
        • 2021-04-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多