在.py和.kv文件之间共享变量,也可以加载和保存

时间:2017-09-03 01:39:39

标签: python python-3.x kivy python-3.6

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

我有一个按钮。按下按钮,假设'ego'stat上升1.我在.py文件中有ego stat,如下所示:

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。然后在我游戏中的预定保存点,我想将这个'ego'变量作为数字1导出到名为'stats.txt'的文件中,我该怎么做?

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

enter image description here

如果在我的kivy应用程序中按下'加载游戏'按钮(在这种情况下,只是自我变量),我将如何加载统计数据?我知道如何在常规python程序中执行此操作,但在应用程序运行时如何更改变量?

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

1 个答案:

答案 0 :(得分:0)

请参阅以下示例。

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

<强>输出:

enter image description here