如何在kivy屏幕更改中调用类中的def

时间:2018-01-21 00:50:12

标签: python function class kivy

我正试图从一个屏幕换到另一个屏幕。但问题是我不能在类中调用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屏幕,并且不显示标签。所以它就像它会进入.main_run()我怎样才能改变它并显示标签?

1 个答案:

答案 0 :(得分:1)

当你这样做时

self.parent.screens[SCREENINDEXHERE].main_run()

您最有可能只是改变哪个屏幕是最新的。

你应该能够以两种方式做到你需要的东西。

java.lang.IllegalArgumentException: The two inputs have different execution contexts.
    at org.apache.flink.api.java.DataSet.checkSameExecutionContext(DataSet.java:1799)
    at org.apache.flink.api.java.operators.TwoInputOperator.<init>(TwoInputOperator.java:42)
    at org.apache.flink.api.java.operators.TwoInputUdfOperator.<init>(TwoInputUdfOperator.java:80)
    at org.apache.flink.api.java.operators.CrossOperator.<init>(CrossOperator.java:90)
    at org.apache.flink.api.java.operators.CrossOperator$DefaultCross.<init>(CrossOperator.java:150)
    at org.apache.flink.api.java.DataSet.crossWithTiny(DataSet.java:1088)
    at org.myorg.quickstart.MessageStreamProcessor$MessageProcessor.processElement(MessageStreamProcessor.java:138)
    at org.myorg.quickstart.MessageStreamProcessor$MessageProcessor.processElement(MessageStreamProcessor.java:125)
    at org.apache.flink.streaming.api.operators.KeyedProcessOperator.processElement(KeyedProcessOperator.java:94)
    at org.apache.flink.streaming.runtime.io.StreamInputProcessor.processInput(StreamInputProcessor.java:207)
    at org.apache.flink.streaming.runtime.tasks.OneInputStreamTask.run(OneInputStreamTask.java:69)
    at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:264)
    at org.apache.flink.runtime.taskmanager.Task.run(Task.java:718)

屏幕名称是您在将其添加到管理员时为屏幕指定的名称,您还可以执行以下操作:

TRY_CONVERT

其中屏幕索引是屏幕添加到列表的点数(即,如果将screentwo添加为第二个屏幕,则您获得第二个索引(即一个)。

此外,您也可以使用管理器代替父级来使用屏幕。