如何在 KivyMD 中保存用户的输入(图像文件)
Posted
技术标签:
【中文标题】如何在 KivyMD 中保存用户的输入(图像文件)【英文标题】:How to save user's input (mage file) in KivyMD 【发布时间】:2021-12-09 16:54:33 【问题描述】:我制作了一个接受用户输入(图像文件)的简单应用。但是每当它关闭时,输入的文件就会丢失,(当然,我没有办法保存它)。 拜托,我希望输入的图像文件在下次打开应用程序时可用,所以请我如何保存输入的图像文件(Perharbs,你可以给我看一个示例代码,指引我到某个地方或任何地方,我会万分感激)。非常感谢您的帮助。
这是我的代码:
from kivy.lang import Builder
from kivymd.app import MDApp
from kivy.core.window import Window
from plyer import filechooser
Window.size = (300, 530)
KV = """
MDBoxLayout:
orientation: 'vertical'
MDToolbar:
id: progress_toolbar
title: 'Progress'
ScrollView:
MDGridLayout:
cols: 2
adaptive_height: True
spacing: (10, 15)
padding: [25, 25]
MDLabel:
halign: 'center'
text: 'Before'
MDLabel:
halign: 'center'
text: 'Now'
MDCard:
ripple_behavior: True
orientation: 'vertical'
size_hint_y: None
size: 120, 220
elevation: 15
radius: 8
MDIconButton:
icon: "camera-outline"
user_font_size: "24sp"
pos_hint: "center_x": .5, "center_y": .5
on_release: app.file_chooser1()
Image:
id: img1
allow_stretch: True
keep_ratio: False
# size_hint_y: .5
MDCard:
ripple_behavior: True
orientation: 'vertical'
size_hint_y: None
size: 120, 220
elevation: 15
radius: 8
MDIconButton:
icon: "camera-outline"
user_font_size: "24sp"
pos_hint: "center_x": .5, "center_y": .5
on_release: app.file_chooser2()
Image:
id: img2
allow_stretch: True
keep_ratio: False
# size_hint_y: .5
MDTextField:
hint_text: 'Date'
width: 100
MDTextField:
hint_text: 'Date'
width: 100
"""
class Example(MDApp):
def build(self):
return Builder.load_string(KV)
def file_chooser1(self):
filechooser.open_file(on_selection=self.selected1)
def file_chooser2(self):
filechooser.open_file(on_selection=self.selected2)
def selected1(self, selection1):
self.root.ids.img1.source = selection1[0]
def selected2(self, selection2):
self.root.ids.img2.source = selection2[0]
Example().run()
再次感谢您的帮助,我将不胜感激。
【问题讨论】:
【参考方案1】:我认为您应该记录图像文件。
如何?
您可以将kivy.storage.jsonstore.JsonStore
类用于日志记录,就像数据库一样。
from kivy.storage.jsonstore import JsonStore
store = JsonStore('database.json')
...
def selected1(self, selection1):
self.root.ids.img1.source = selection1[0]
files_list = store['database']['files']
files_list.append(selection1[0])
store.put('database', files=files_list)
像这样。我希望我能帮助你。您可以搜索如何使用JsonStore Kivy?
【讨论】:
非常感谢@efpyc 的帮助,我实现了你的代码,但收到了KeyError: 'database'
。
您的database.json
文件应如下所示:"database": "files": []
我不太明白,我应该在哪里添加这个"database": "files": []
创建一个名为database.json
的新文件并将"database": "files": []
写入文件
非常感谢您的帮助。它确实会保存,但不会加载图像。重新打开应用程序时可用。以上是关于如何在 KivyMD 中保存用户的输入(图像文件)的主要内容,如果未能解决你的问题,请参考以下文章