python - 将复选框数据和文本输入数据保存到 .Json 文件
问题描述
我试图将数据从我的应用程序的一页保存到 .json 文件中。有 2 个复选框和 1 个文本输入区域。我只希望保存其中一个,因为并非所有这些都需要保存。只选了一个。
我尝试阅读 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 文档看起来像这样:
#: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”对象没有属性“文本”
预期的结果显然是保存的 json 数据。我需要能够一次选择一个或另一个,甚至全部。我已经尝试了所有我能找到的。我的猫害怕我。我需要帮助。谢谢你。
解决方案
推荐阅读
- asp.net-core - 在 .ThenInclude 中为模型添加过滤器到剃刀视图
- android - SocketServer.accept() 使应用程序崩溃或有时无法正常工作
- bash - 检查字符串日期(mm/dd/yyyy)是否是周末 - bash
- javascript - 如何使用 POST 请求实现 http-equiv/refresh?
- javascript - 使用 Node JS 从 MySQL 数据库中删除一行
- node.js - Nodejs从函数返回结果是空的承诺
- php - 如何为某些 WordPress 用户角色隐藏 Adsense Java 脚本?
- python - 如何删除 NDB 模型中包含特定属性的实体?
- laravel - Nginx 多位置 laravel 项目
- javascript - 气体计算——找不到错误