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

如何在KivyMD中保存用户输入,实现重启应用后数据留存

解决方案

你猜测的kivy.json相关能力对应Kivy官方内置的JsonStore轻量持久化模块,无需修改kv文件,仅调整main.py逻辑即可实现数据持久化需求,修改后的完整代码如下:

from kivymd.app import MDApp
from kivymd.uix.list import OneLineIconListItem, IconLeftWidget
from kivy.core.window import Window
from kivy.storage.jsonstore import JsonStore

Window.size = (300, 530)

class MainApp(MDApp):
    def build(self):
        self.theme_cls.primary_palette = 'Gray'
        self.theme_cls.primary_hue = '200'
        self.theme_cls.theme_style = 'Dark'
        # 初始化JSON存储,自动管理本地文件路径
        self.store = JsonStore('list_items.json')
        # 首次启动初始化空列表
        if not self.store.exists('items'):
            self.store.put('items', data=[])

    def on_start(self):
        # 应用启动后加载历史数据渲染
        history_items = self.store.get('items')['data']
        for item_text in history_items:
            self.add_item(item_text, save=False)

    def add_item(self, text, save=True):
        if not text.strip():
            return
        new_list_item = OneLineIconListItem(text=text)
        new_list_item.add_widget(
            IconLeftWidget(icon="pin")
        )
        self.root.ids.listcontainer.add_widget(new_list_item)
        self.root.ids.listinput.text = ''
        # 新增条目时同步写入本地存储
        if save:
            current_items = self.store.get('items')['data']
            current_items.append(text)
            self.store.put('items', data=current_items)

if __name__ == "__main__":
    app = MainApp()
    app.run()

关键逻辑说明

  • JsonStore会自动将数据存储在对应平台的应用私有目录下,无需手动处理文件权限、路径适配问题,支持安卓/iOS/桌面端全平台适配
  • on_start是Kivy应用的生命周期回调,会在界面渲染完成后自动执行,用于加载历史数据
  • add_item新增的save参数用于区分是用户新增的条目还是启动时加载的历史条目,避免重复写入存储

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:45:08