这是我在.py端的代码摘录,引起问题:
class ScreenMath(Screen):
def __init__(self,**kwargs):
super(ScreenMath,self).__init__(**kwargs)
self.ids.anchmath.ids.grdmath.ids.score.text = str("Score:" + "3")
.kv端:
<ScreenMath>:
AnchorLayout:
id: "anchmath"
...
GridLayout:
id: "grdmath"
...
Button:
id: "score"
运行代码时,发生AttributeError:
File "kivy\properties.pyx", line 841, in kivy.properties.ObservableDict.__getattr__
AttributeError: 'super' object has no attribute '__getattr__'
如您所见,我想在启动屏幕时更改值文本(以后将是3),但是也许有更好的方法来实现。
答案 0 :(得分:0)
self.ids.anchmath.ids.grdmath.ids.score.text = str("Score:" + "3")
替换为self.ids.score.text = str("Score:" + "3")
。 self.ids
是字典。Kv language » Referencing Widgets
警告
为ID分配值时,请记住该值不是字符串。 没有引号:好-> id:值,差-> id:“值”
在解析您的kv文件时,kivy会收集所有标有id的小部件,并将它们放在此self.ids字典类型属性中。这意味着您还可以遍历这些小部件并访问它们的字典样式:
for key, val in self.ids.items():
print("key={0}, val={1}".format(key, val))
class ScreenMath(Screen):
def __init__(self,**kwargs):
super(ScreenMath,self).__init__(**kwargs)
self.ids.score.text = str("Score:" + "3")
<ScreenMath>:
AnchorLayout:
id: anchmath
...
GridLayout:
id: grdmath
...
Button:
id: score