python - 如何在 .kv 中引用应用程序?任何引用都以 AttributeError 结尾
问题描述
我想使用应用程序中的属性,但任何引用都以: AttributeError: 'NoneType' object has no attribute '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)
; 通过ScreenManagement
/参考FightScreen
访问应用程序属性的问题
解决方案
该app
属性是None
直到App
创建。只需将 的加载移动kv
到 的build()
方法中App
,以便在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
推荐阅读
- sitemappath - 站点地图似乎不适用于 .Net Core
- react-native - 防止在本机反应中按下 TextInput 时显示系统键盘
- python - 在Python中将分隔的字符串拆分为字典,但忽略双引号之间的“相等”
- python - 对系数有约束的多元线性回归
- git - Git:合并给出了意想不到的结果
- excel - Excel 的通用 VBA 字数统计
- java - 如何修复 java.lang.IllegalStateException:您尚未启动 Objectify 上下文
- c - 如果是文字成绩,我如何计算大学平均成绩?
- javascript - 3秒后调用函数更新'onclick'参数
- angular - 如何在 Angular 7 中手动清除 routeReuseStrategy?