【问题标题】:Sharing variables between .py and .kv files, also loading and saving在 .py 和 .kv 文件之间共享变量,以及加载和保存
【发布时间】:2017-09-04 09:51:34
【问题描述】:

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

我有一个按钮。通过按下按钮,假设“自我”状态增加 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。然后在我的游戏中预先确定的保存点,我想将这个“自我”变量作为数字 1 导出到一个名为“stats.txt”的文件中,我该怎么做?

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

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

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

【问题讨论】:

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


    【解决方案1】:

    请参考以下示例。

    ma​​in.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()
    

    输出:

    【讨论】:

    • 非常感谢兄弟,一整天都在努力解决这个问题。
    • 完美工作:)
    猜你喜欢
    • 2015-03-28
    • 2017-09-14
    • 1970-01-01
    • 2020-04-08
    • 2012-10-27
    • 2018-04-25
    • 2020-09-11
    • 2011-09-14
    • 2013-07-26
    相关资源
    最近更新 更多