gpt4 book ai didi

mysql - 如何从 python/kivy 应用程序存储数据

转载 作者:行者123 更新时间:2023-11-29 07:31:32 25 4
gpt4 key购买 nike

我想知道如何存储来 self 的应用程序的数据,以便我可以在重新运行该应用程序时查看数据。

例如我在 TextInput 中输入了一些信息,然后当我点击提交按钮时,信息被粘贴到标签中,所以我关闭了应用程序,当我重新打开它时,信息应该出现在标签中。我知道有 sqlite3 和 mysql,但我不知道如何将它应用到我的 python/kivy 代码中。

请有人建议我如何做到这一点。

如果可以的话再举个例子就完美了。

提前致谢

我的py代码:

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()

最佳答案

当然你可以使用 sqlite3,但是像你的例子一样为 kivy 应用程序存储基本数据的最简单方法是使用带有 kivy 自己的 JsonStore 类的 json 文件。它的好处是可以根据部署的平台将文件分配到正确的位置,您无需关心具体位置。

这是一个使用 get()、put() 和 exists() 方法存储来自 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 的字典。

对于 kivy 的 JsonStore 类,它假定您至少使用两个级别,因此 {"mydata": {"text": "What you have written last run"}}。在这个简单的示例中,嵌套字典没有多大意义,但通常它正是您真正想要的实际应用程序,例如,如果您想要获取多个联系人的联系人数据,或者您想要存储各种配置对于应用程序本身的多个小部件(在这种情况下,您可能希望在加载小部件之前读取 (get()) 数据,可能在 App 类的 build() 方法中)。

引用:https://kivy.org/docs/api-kivy.storage.html

关于mysql - 如何从 python/kivy 应用程序存储数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51029199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com