Kivy / Python中super的属性错误

时间:2018-08-25 13:35:53

标签: python kivy super attributeerror kivy-language

这是我在.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),但是也许有更好的方法来实现。

1 个答案:

答案 0 :(得分:0)

问题

    kv文件中的
  1. id不是字符串。因此,请从id中删除双引号。
  2. 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 language » self.ids

在解析您的kv文件时,kivy会收集所有标有id的小部件,并将它们放在此self.ids字典类型属性中。这意味着您还可以遍历这些小部件并访问它们的字典样式:

for key, val in self.ids.items():
    print("key={0}, val={1}".format(key, val))

代码段-Python代码

class ScreenMath(Screen):

    def __init__(self,**kwargs):
        super(ScreenMath,self).__init__(**kwargs)
        self.ids.score.text = str("Score:" + "3")

摘要-kv文件

<ScreenMath>:
    AnchorLayout:
        id: anchmath
        ...    
        GridLayout:
            id: grdmath
            ...
            Button:
                id: score

输出

Img01