如何在 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 中保存用户的输入(图像文件)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 KivyMD 中添加启动画面

在 kivymd 上重新运行应用程序后如何保存和加载数据

如何在kivymd focus agane中制作输入字段

KivyMD 文件管理器功能

如何动态更改 MDDialog KivyMD 中的文本字段?

如何在 KivyMD 的 .kv 文件中使用 kivy 中的数据表?