如何在 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的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Kivy 中从 python 代码更改屏幕

Kivy - 屏幕管理器 - 访问其他类中的属性

如果在 kivy 文件中定义了屏幕管理器,如何在 Python 中更改屏幕?

如何从另一个类/屏幕 kivy 访问值

如何更改kivy中的图像源?

python - 如何在python的kivy app模块中更改屏幕背景的颜色?