无法调用KV文件中的py文件中定义的自变量

时间:2020-09-01 16:42:51

标签: python variables kivy

我在kivy中在.py文件和.kv文件之间共享变量时遇到问题。

在解释我的询问之前,这里有一些代码。

.py文件

from kivy.app import App
from kivy.boxlayout import BoxLayout


class Test(BoxLayout):
    def myfunc(self):
        self.mytext = 'blabla'

class MyApp(App):
    def build(self):
        return Test()

if name == '__main__':
    MyApp.run()

.kv文件

<Test>
    Button:
        text: root.mytext

如果运行此命令,则会有一个Traceback,它说Test()没有名为mytext的变量,这很正常,因为我的变量是self.mytext

但是当我用root.self.mytext更改.kv文件中的变量时,我有一个Traceback,它说Test()中没有变量'self',这也是正常的。

那么如何在Test()类的.kv文件中调用自变量?还是有一种方法可以将我的变量共享到2个类中,以便以后在Test()类中使用它?

请允许我指出,当我不在.kv文件中制定规则并在构建中创建变量时,它可以正常工作。

谢谢

1 个答案:

答案 0 :(得分:0)

如果运行此命令,则会有一个Traceback,它说Test()没有名为mytext的变量,这很正常,因为我的变量是self.mytext

您的理解是错误的,变量不是self.mytext,该行代码设置了mytext实例的Test属性。在kv文件中以root.mytext的身份访问是完全合理的。

您的问题是,您从未调用myfunc,因此也从未将self.mytext设置为任何值,因此您会看到错误。

尝试将self.mytext = "initial value放在__init__的{​​{1}}方法中。