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

如何在KivyMD项目的.kv文件中使用MDDataTable数据表格?

KivyMD密码管理器第二页动态添加MDDataTable方案

第一步:修改KV文件

删除原有节点下错误声明的MDDataTable,给承载表格的BoxLayout添加id属性方便Python侧调用,修改后代码如下:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 01:15:02