在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