Как хранить данные из приложения python / kivy - PullRequest
0 голосов
/ 25 июня 2018

Я хотел бы знать, как хранить данные из моего приложения, чтобы я мог просматривать данные при повторном запуске приложения.

например. Я набираю некоторую информацию в TextInput, а затем, когда я нажимаю кнопку отправки, информация вставляется в метку, поэтому я закрываю приложение, и при повторном открытии информация должна появиться в метке. Я знаю, что есть sqlite3 и mysql, но я не знаю, как применить его в моем коде python / kivy.

Пожалуйста, кто-нибудь подскажет, как это можно сделать.

Если можно показать с примером, было бы идеально.

Заранее спасибо,

Мой код:

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
from random import shuffle
from kivy.core.window import Window
Window.clearcolor = [1, 1, 1, 1]
Window.size = (550, 650)

Builder.load_file('builder.kv')


class MainScreen(ScreenManager):
    pass


class Menu(Screen):
    pass


class Levels(Screen):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

    def on_pre_enter(self):
        Window.bind(on_keyboard=self.voltar)

    def voltar(self, window, key, *args):
        if key == 27:
            App.get_running_app().root.current = 'menu'
            return True

    def on_pre_leave(self):
        Window.unbind(on_keyboard=self.voltar)


class LvLogos(Screen):
    def on_pre_enter(self):
        Window.bind(on_keyboard=self.voltar)

    def voltar(self, window, key, *args):
        if key == 27:
            App.get_running_app().root.current = 'menu'
            return True

    def on_pre_leave(self):
        Window.unbind(on_keyboard=self.voltar)


class Logo(Screen):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

    def shuffle(self):
        letter = self.letters
        self.s = shuffle(letter)
        return letter

    def on_pre_enter(self):
        Window.bind(on_keyboard=self.voltar)

    def voltar(self, window, key, *args):
        if key == 27:
            App.get_running_app().root.current = 'menu'
            return True

    def on_pre_leave(self):
        Window.unbind(on_keyboard=self.voltar)


class LvShields(Screen):
    pass


class Shield(Screen):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

    def shuffle(self):
        letter = self.letters
        self.s = shuffle(letter)
        return letter


class QuizZApp(App):
    def build(self):
        self.icon = 'C:\\Users\\gusta\\PycharmProjects\\QuizzApp\\Images\\QuizzLogo.png'
        return MainScreen()


if __name__ == '__main__':
    QuizZApp().run()

1 Ответ

0 голосов
/ 26 июня 2018

Конечно, вы можете использовать sqlite3, но самый простой способ хранения базовых данных для приложения kivy, как, например, ваш пример, - это использовать файл json с собственным классом JsonStore в kivy.Преимущество размещения файла в нужном месте, в зависимости от платформы, на которой он развернут, вам не нужно заботиться, где именно.

Вот простой пример использования get (), put ()и существующие методы () для хранения набранного текста из TextInput и загрузки его в метку.(Вам не нужно создавать сам файл, просто инициализируйте объект и напишите в нем (put ()).

from kivy.uix.boxlayout import BoxLayout
from kivy.storage.jsonstore import JsonStore
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.properties import ObjectProperty

kv='''
RootWidget:
    orientation: 'vertical'
    BoxLayout:
        TextInput:
            id: txtinpt
        Label:
            id: lbl
            text: root.stored_data.get('mydata')['text'] if root.stored_data.exists('mydata') else ''
    Button:
        size_hint_y: .3
        text: 'Submit'
        on_press:
            root.stored_data.put('mydata', text=txtinpt.text)
            lbl.text = txtinpt.text
'''

class RootWidget(BoxLayout):
    stored_data = ObjectProperty(None)
    def __init__(self, *args, **kwargs):
        super(BoxLayout, self).__init__(*args, **kwargs)
        self.stored_data = JsonStore('data.json')


runTouchApp(Builder.load_string(kv))

Если вы новичок в Json, это файл, содержащий списокпары, значение которых само по себе может быть новым списком пары.почти как в python dict.

Для класса JivStore от kivy предполагается, что вы работаете минимум с двумя уровнями, поэтому {"mydata": {"text": "То, что вы написали в последний раз«}} .В этом простом примере не имеет особого смысла иметь вложенный dict, но в целом это будет именно то, что вам нужно для реальных приложений, например, если вы хотите взять данные о контактах для нескольких контактов, или вы хотите хранить различные конфигурациидля нескольких виджетов для самого приложения (в этом случае вы можете прочитать (получить ()) данные перед загрузкой виджетов, вероятно, в методе build () класса приложения.

ссылка: https://kivy.org/docs/api-kivy.storage.html

...