【问题标题】:How to call a def in a class within kivy screen change如何在 kivy 屏幕更改中调用类中的 def
【发布时间】: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() 我怎样才能让它改变并显示标签?

【问题讨论】:

    标签: python function class kivy


    【解决方案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”删除小部件(否则您最终会为每个条目创建一个小部件,这可能会变得太多)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    相关资源
    最近更新 更多