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

Kivy MDDataTable动态创建仅显示5行的问题求助

解决MDDataTable仅显示5行的问题

问题出在MDDataTable的默认配置:该组件默认rows_num参数值为5,当行数据超过5条时会自动启用分页,仅显示前5行内容。

解决方案

有两种方式可以让所有行正常显示:

方式1:设置每页显示行数等于总轮数

在创建MDDataTable时,显式指定rows_num为rounds的值,让每页显示所有行:

def create_table(self):
    rounds = self.root.get_screen("new_game").ids['rounds'].value
    players = self.root.get_screen("new_game").ids['players'].value
    players = int(players)
    rounds = int(rounds)
    round_list = [("0",) * players for _ in range(rounds)]
    table = MDDataTable(
        column_data=[(f"Player {x + 1}", dp(20)) for x in range(players)],
        row_data=round_list,
        rows_num=rounds,  # 关键:设置每页显示的行数等于总轮数
        on_row_press=self.open_popup
    )

    self.root.get_screen("scorecard").ids['add_table_to_scrollview'].add_widget(table)
    self.sm.current = "scorecard"

方式2:完全禁用分页

如果不需要分页功能,直接设置pagination=False,所有行会一次性显示,结合外部的MDScrollView可以滚动查看:

def create_table(self):
    rounds = self.root.get_screen("new_game").ids['rounds'].value
    players = self.root.get_screen("new_game").ids['players'].value
    players = int(players)
    rounds = int(rounds)
    round_list = [("0",) * players for _ in range(rounds)]
    table = MDDataTable(
        column_data=[(f"Player {x + 1}", dp(20)) for x in range(players)],
        row_data=round_list,
        pagination=False,  # 关键:禁用分页
        on_row_press=self.open_popup
    )

    self.root.get_screen("scorecard").ids['add_table_to_scrollview'].add_widget(table)
    self.sm.current = "scorecard"

补充说明

  • 方式1适合需要保留分页功能的场景,比如后续轮数非常多的时候可以分页查看;
  • 方式2更适合计分卡这种需要快速浏览所有轮次的场景,配合ScrollView使用体验更流畅。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:07:38