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

