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

