如何在 kivy 屏幕更改中调用类中的 def
Posted
技术标签:
【中文标题】如何在 kivy 屏幕更改中调用类中的 def【英文标题】:How to call a def in a class within kivy screen change 【发布时间】:2018-06-29 23:09:40 【问题描述】:我正在尝试从一个屏幕切换到另一个屏幕。但问题是我不能在我想改变屏幕的类中调用def。
class ScreenTwo(Screen):
def remove_code(self):
main = Main_app()
self.parent.current = main.main_run()
class Main_app(Screen):
def main_run(self):
self.add_widget(Label(text="Test 1", color=(1,0,0,1), font_size=(30),size_hint=(0.4,0.15), pos_hint="x":0.3, "top": 0.93))
它只是将屏幕更改为 Main_App 屏幕并且不显示标签。所以它就像 ingores .main_run()
我怎样才能让它改变并显示标签?
【问题讨论】:
【参考方案1】:当你这样做时
self.parent.current = main
您很可能只是更改当前屏幕。
你应该能够做你需要的两种方式之一。
self.parent.get_screen('INSERTSCREENNAMEHERE').main_run()
其中屏幕名称,是您在将屏幕添加到管理器时给屏幕的名称,您也可以这样做:
self.parent.screens[SCREENINDEXHERE].main_run()
其中屏幕索引是将屏幕添加到列表中的点的编号(即,如果将 screentwo 添加为第二个屏幕,您将获得第二个索引(即一个)。
此外,您也可以使用管理器代替父屏幕。
【讨论】:
我把问题改了。我希望它在将屏幕切换到 Main_app.main_run 时在 def 中显示标签。 (mian_run 是定义) 我误解了你的问题。为此,您可以使用 on_enter 方法:您需要做的就是将 Main_app 屏幕下的“def main_run”更改为“def on_enter”,这意味着它会在您进入该屏幕时触发该代码。您也不需要“remove_code”方法。 kivy.org/docs/api-kivy.uix.screenmanager.html 哦,我现在明白了。我知道了。因此,“on_enter”会显示何时调用屏幕并将其更改为调用该函数。谢谢!! 是的。如果需要,您还可以使用“on_leave”删除小部件(否则您最终会为每个条目创建一个小部件,这可能会变得太多)。以上是关于如何在 kivy 屏幕更改中调用类中的 def的主要内容,如果未能解决你的问题,请参考以下文章