如何在KivyMD项目的.kv文件中使用MDDataTable数据表格?
KivyMD密码管理器第二页动态添加MDDataTable方案
第一步:修改KV文件
删除原有
WindowManager: MainWindow: SecondWindow: <MainWindow>: name: "main" MDCard: size_hint:None,None size:400,500 pos_hint:{"center_x":.5,"center_y":.5} elevation:10 padding:25 spacing:25 background_color:25 orientation:"vertical" <SecondWindow>: name: "second" BoxLayout: id: container orientation:"vertical" size:root.width,root.height padding:30 spacing:25 Label: markup:True font_size:35 text:"SAVED PASSWORDS" halign: "left" size_hint_y: None height:self.texture_size[1]
第二步:修改Python代码
修改SecondWindow类,添加动态加载MDDataTable的逻辑,每次进入第二页时自动加载最新数据,完整修改后代码如下:
from kivy.config import Config Config.set('graphics', 'width', '500') Config.set('graphics', 'height', '600') Config.set('graphics', 'resizable', 'False') from kivy.lang import Builder from kivymd.app import MDApp from kivy.metrics import dp from kivy.uix.screenmanager import ScreenManager, Screen from kivymd.uix.datatables import MDDataTable import sqlite3 class MainWindow(Screen): pass class SecondWindow(Screen): def on_enter(self, *args): # 每次进入页面先清空容器原有组件,避免重复添加表格 self.ids.container.clear_widgets() # 重新添加标题Label self.ids.container.add_widget( Label( markup=True, font_size=35, text="SAVED PASSWORDS", halign="left", size_hint_y=None, height=self.ids.container.height * 0.1 ) ) # 初始化MDDataTable self.data_table = MDDataTable( size_hint=(1, 0.8), use_pagination=True, column_data=[ ("网址", dp(30)), ("账号", dp(30)), ("密码", dp(30)), ], # 此处可替换为从sqlite查询的真实数据 row_data=[ ("baidu.com", "test1", "123456"), ("google.com", "test2", "abcdef"), ("github.com", "test3", "ghijkl") ] ) # 将表格添加到容器中 self.ids.container.add_widget(self.data_table) class WindowManager(ScreenManager): pass class MainApp(MDApp): def build(self): Config.set('graphics', 'resizable', False) self.theme_cls.theme_style = "Dark" self.theme_cls.primary_palette = "Purple" return Builder.load_file("login.kv") MainApp().run()
逻辑说明
on_enter是Screen组件的生命周期方法,会在每次页面切换到当前Screen时自动触发,适合加载实时数据- 每次添加表格前清空容器,可避免多次切换页面出现重复组件的问题
- MDDataTable的
column_data和row_data参数可根据实际业务需求调整,行数据直接替换为从sqlite数据库查询返回的结果即可 - 可根据需要开启MDDataTable的排序、选择、分页等内置功能,无需额外自定义逻辑
内容的提问来源于stack exchange,提问作者Animesh Singh
相关产品推荐
相关产品推荐

