在kivy中重新启动应用程序

Posted

技术标签:

【中文标题】在kivy中重新启动应用程序【英文标题】:Restarting an app in kivy 【发布时间】:2015-01-12 06:39:25 【问题描述】:

我编写了一个简单的游戏,我想在按下某个按钮后重新启动(以便一切都回到应用程序运行时的位置)。 所以问题是:我需要在 on_press 中输入什么才能再次启动 Game() ance?

class Game(Widget):
    (...)
    def but_add(self, player):
        self.add_widget(Button(text=player,
                               font_size=30,
                               center_x=self.width/2,
                               center_y=self.height/2,
                               size=(self.height, self.height*7/20),
                               background_normal='katana.jpg',
                               background_down='katana.jpg',
                               markup=True,
                               on_press= ???????? ))
    (...)

class Okiya(App):
    def build(self):    
        return Game()

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

【问题讨论】:

【参考方案1】:

您可能并不想重新启动整个应用程序,而只是重置其状态。这样做的机制取决于你,你是知道初始状态应该是什么样子的人;例如,您可以使用on_press=self.reset_func 并定义reset_func 方法来执行所有这些任务。

您还可以删除小部件并添加一个新实例,该实例将具有默认属性。

【讨论】:

我该如何“删除小部件并添加一个具有默认属性的新实例”? 要查看的小部件方法是 .clear_widgets() 和 .canvas.clear()。检查文档以获取可能的参数和其他有用的方法。据我所知,没有一种方法可以做到这一点,因此您可能需要为每个应用定制自己的程序。【参考方案2】:

我不确切知道它的价值,但以下适用于我正在做的应用程序:

将以下方法添加到您的应用程序类中:

class Okiya(App):
    def restart(self):
        self.root.clear_widgets()
        self.stop()
        return Okiya().run()

然后从要重启应用的python文件中调用该方法:

App.get_running_app().restart()

【讨论】:

以上是关于在kivy中重新启动应用程序的主要内容,如果未能解决你的问题,请参考以下文章

单击“TextInput”对象后在 Kivy 中重新获得键盘焦点

如何使用来自另一个 kivy 应用程序的参数启动 kivy 应用程序

无法在触摸屏中使用 3.5 的 Raspberry Pi 3 上成功启动 Kivy 应用程序

Kivy 启动器:找不到路径 /storage/emulated/0/kivy

从 kivy 1.11.1 升级到 kivy 2.0.0 后,应用程序在启动时抛出错误。任何想法?

在启动时启动 Kivy 服务 (Android)