在 .py 和 .kv 文件之间共享变量,同时加载和保存

Sharing variables between .py and .kv files, also loading and saving

我正在制作一个基于文本的游戏,该游戏已在 python 上基本完成。我有一个保存和加载系统,它是一个流畅的 运行 游戏,但是,我想制作一个 GUI 以使其更加用户友好。我决定使用基维。我已经弄清楚了如何使用屏幕,以及如何在屏幕之间切换(基本上我已经解决了图形方面的问题),但我希望能够在我的应用程序中使用变量并将进度保存到各种文件中。例如:

我有一个按钮。通过按下按钮,假设 'ego' 统计数据上升 1。我的 .py 文件中有自我统计数据,如下所示:

presentation = Builder.load_file("Baller.kv") #loads the .kv file I am using
class BallerApp(App):
    ego = 0 #here the ego stat is set to 0
    def build(self):
        return presentation

现在说我想在程序 运行 时向该变量加 1(我假设我将需要 'on_release: ego = ego + 1' 之类的东西)并在应用程序为 [时将 ego 变量保存为 1 =33=]。然后在我的游戏中一个预先确定的保存点,我想将这个 'ego' 变量作为数字 1 导出到一个名为 'stats.txt' 的文件中,我该怎么做?

最后,当应用程序打开时,您会看到这个主菜单:

当按下 'Load Game' 按钮(在本例中,只是 ego 变量)时,我如何将统计信息加载到我的 kivy 应用程序中?我知道如何在常规 python 程序中执行此操作,但是如何在应用程序处于 运行 时更改变量?

提前感谢您在此问题上提供的任何帮助:)

请参考下面的例子。

main.py

class RootWidget(BoxLayout):
    ego_stat = NumericProperty(0)

    def update_ego_stat(self):
        self.ego_stat += 1

    def save_ego_stat(self):
        with open("ego_stat.txt", "w") as fobj:
            fobj.write(str(self.ego_stat))

    def load_ego_stat(self):
        with open("ego_stat.txt") as fobj:
            for stat in fobj:
                self.ego_stat = int(stat.rstrip())


class TestApp(App):

    def build(self):
        return RootWidget()


if __name__ == "__main__":
    TestApp().run()

test.kv

#:kivy 1.10.0

<RootWidget>:
    orientation: "vertical"
    Label:
        id: lbl_wid
        font_size: 70
        center_x: root.width / 4
        top: root.top - 50
        text: str(root.ego_stat)
    Button:
        text: "ego stat"
        on_release: root.update_ego_stat()
    Button:
        text: "save ego stat"
        on_release: root.save_ego_stat()
    Button:
        text: "Load Game"
        on_release: root.load_ego_stat()

输出: