Сохраните данные флажка и данные ввода текста в файл .Json - PullRequest
1 голос
/ 12 мая 2019

Я пытаюсь сохранить данные с одной страницы моего приложения в файл .json. Есть 2 флажка и одна область ввода текста. Я только хочу сохранить один или другой, так как не все из них должны быть сохранены. Просто выбранный.

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


from kivy.app import App
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen, ScreenManager, FadeTransition
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
from kivy.core.window import Window
from kivy.properties import ListProperty, ObjectProperty
from kivy.uix.checkbox import CheckBox
from kivy.uix.button import Button
from kivy.storage.jsonstore import JsonStore
from kivy.clock import Clock

class MyScreenManager(ScreenManager):
    pass

class FirstScreen(Screen):
    pass

class Who(Screen):
    def __init__(self, **kwargs):
        super(Who, self).__init__(**kwargs)
        self.store = JsonStore("who.json")
        Clock.schedule_once(lambda *args: self.load())

    def save(self):
        self.store.put('who',
            mum = self.mum.checkbox,
            dad = self.dad.checkbox,
            other = self.other.text)

    def load(self):
        if self.store.exists('who'):
            who = self.store.get('who')
            w = [("mum", self.mum), ("dad", self.dad), ("other", self.other)]
            for key, ti in v:
                val = who.get(key)
                if val:
                    ti.text = val

root_widget = Builder.load_file("test.kv")

runTouchApp(root_widget)

и мой kv doc выглядит так:


#:import FadeTransition kivy.uix.screenmanager.FadeTransition
#:import StringProperty kivy.properties.StringProperty
#:import ObjectProperty kivy.properties.ObjectProperty
#:import Label kivy.uix.label.Label
#:import Window kivy.core.window.Window
#:import ListProperty kivy.properties.ListProperty
#:import CheckBox kivy.uix.checkbox.CheckBox
#:import TextInput kivy.uix.textinput.TextInput
#:import Button kivy.uix.button.Button
#:import BoxLayout kivy.uix.boxlayout.BoxLayout
#:import GridLayout kivy.uix.gridlayout.GridLayout
#:import CheckBox kivy.uix.checkbox.CheckBox

MyScreenManager:

    transition: FadeTransition()
    Who:
    FirstScreen:

<Who>:
    name: 'who'   

    mum: mum
    dad: dad
    other: other

    GridLayout:
        cols: 2
        row_force_default: True
        row_default_height: '50dp'

        Label:
            text: 'Mum'
            font_size: 30

        CheckBox:
            id: mum
            on_press: root.save(mum.active, mum.text)

        Label:
            text: 'Dad'
            font_size: 30

        CheckBox:
            id: dad
            on_press: root.save(dad.active, dad.text)

        Label:
            text: 'Someone Else'
            font_size: 30

        TextInput:
            id: other
            multiline: False
            font_size: 30

        Button:
            text: 'Book'
            font_size: 30
            valign: 'middle'
            on_press: root.save()

        Button:
            text: 'Cancel'
            font_size: 30
            valign: 'middle'
            on_press: root.manager.current = 'first'

<FirstScreen>:
    name: 'first'

    BoxLayout:
        orientation: 'vertical'
        Label:
            text: 'Go Back'
            font_size: 40
        BoxLayout:
            Button:
                text: 'Back To Who'
                font_size: 40
                on_press: root.manager.current = 'who'

Результат обычно вращается вокруг этого:

Файл "kivy / weakproxy.pyx", строка 30, в файле kivy.weakproxy.WeakProxy. getattr AttributeError: у объекта 'CheckBox' нет атрибута 'text'


Ожидаемый результат - очевидно сохраненные данные JSON. Мне нужно иметь возможность выбрать один или другой или даже все сразу. Я перепробовал все, что смог найти. Мой кот боится меня. Мне нужна помощь. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...