如何在 .kv 中引用应用程序?任何引用都以 AttributeError 结尾

How to reference app in .kv? Any reference ends with AttributeError

我想使用应用程序中的属性,但任何引用都以: AttributeError: 'NoneType' 对象没有属性 'bind' 这是我的部分代码:

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import StringProperty
from kivy.lang import Builder

class FightScreen(Screen):
    pass

class ScreenManagement(ScreenManager):
    pass


# design constructor
kv = Builder.load_file('AppDesign.kv')

class Design(App):
    def __init__(self, **kwargs):
        super(Design, self).__init__(**kwargs)
        self.main_hero = MainHero() # Tried main_hero = MainHero() too
        self.val = self.main_hero.nick  # string

    # Construct app
    def build(self):
        return kv

if __name__ == "__main__":
    Design().run()
# Using kv 2.0
ScreenManagement:
    id: screen_manager
    FightScreen:
        name: 'FightScreen'
        manager: screen_manager
        id: fight_screen

<FightScreen>

FloatLayout:
     BasicBackground
     Label:
          text: app.val
          pos_hint: {'center_x': .5, 'center_y': .35}

任何尝试在 .kv 中引用应用程序都将导致错误。 我尝试使用

StringProperty; apply_property(**kwargs); reference through ScreenManagement/ FightScreen

Problems to access app attributes too

在创建 App 之前,app 属性是 None。只需将 kv 的加载移动到 Appbuild() 方法中,以便在创建 App 之前不执行:

class Design(App):
    val = StringProperty('default')

    def __init__(self, **kwargs):
        super(Design, self).__init__(**kwargs)
        self.main_hero = MainHero() # Tried main_hero = MainHero() too

    # Construct app
    def build(self):
        # design constructor
        kv = Builder.load_file('AppDesign.kv')
        return kv