如何在.kv中引用应用程序?任何引用都以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中引用应用程序的尝试都将导致错误。我试过使用

StringPropertyapply_property(**kwargs);通过ScreenManagement/FightScreen的参考

访问应用程序属性的问题

在创建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

最新更新