如何在 .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
的加载移动到 App
的 build()
方法中,以便在创建 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
我想使用应用程序中的属性,但任何引用都以: 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 throughScreenManagement
/FightScreen
Problems to access app attributes too
在创建 App
之前,app
属性是 None
。只需将 kv
的加载移动到 App
的 build()
方法中,以便在创建 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