从屏幕类调用 kv 中的父函数

Posted

技术标签:

【中文标题】从屏幕类调用 kv 中的父函数【英文标题】:Calling parent function in kv, from screen class 【发布时间】:2021-01-30 04:05:24 【问题描述】:

我在script1.py 中有一个方法,带有一个函数function1 和一个屏幕类Screen,以及它附带的kv 文件gui.kv。我想在gui.kv 中调用function1,在Screen 类中。

唯一的问题是我不知道怎么做。 root. 将调用 Screen 类,但我想从更广泛的范围调用 script1.py,因为这是定义 function1 的地方。

我该怎么做?

编辑:

我将在一段更实用的代码中说明我的意思:

Script1.py

from kivy.uix.screenmanager import Screen

def function1(digit):
    return digit + 2

class Screen(Screen):
    pass

gui.kv

<Screen>:
    FloatLayout:
        <I would like to call function1(digit) here>

我试过 root.function1(digit) 但这不起作用,因为 rootScreen 类。我也试过super().root.function(digit) 来访问整个脚本,但也没有用。

【问题讨论】:

请发帖minimal reproducible example。向我们展示您的尝试。 我实际上试图让我的问题尽可能直截了当且与上下文无关。我将添加一些基本脚本。 【参考方案1】:

不幸的是,python/kivy 与上下文密切相关,这就是我们要求minimal reproducible example 的原因。

鉴于您提供的内容,您可以从kv 文件中访问function1,如下所示:

#:import Script1 Script1

<Screen>:
    FloatLayout:
        Label:
            text: str(Script1.function1(3)

请参阅kivy.lang documentation。请注意,这使用了在加载 kv 文件时从 function1() 返回的值,并且不设置任何绑定。这也假设所有文件都在同一个文件夹中。

【讨论】:

感谢您的回复!这行得通。主要问题是导入。

以上是关于从屏幕类调用 kv 中的父函数的主要内容,如果未能解决你的问题,请参考以下文章

如何从匿名内部类调用特定的父构造函数?

使用 useRef 从 Reactjs 中的父级调用子函数

从 vue.js 中的父模板调用函数

从reactjs中的父组件调用并将参数传递给子组件的函数

C#在不同线程的同一类中的父线程中调用方法

(Kivy) 从 App 类调用函数 - 函数对象没有属性