Canvas颜色绑定到属性(Kivy book):TypeError:'NoneType'对象不可迭代

时间:2017-11-19 04:09:33

标签: python kivy kivy-language

此代码位于Roberto Ulloa的 Kivy - Python中的交互式应用程序和游戏 - 第二版一书中。

#:kivy 1.9.0

<Subtitle@Label>:
    bcolor: .1, .1, .1, 0
    halign: 'center'
    font_size: '20px'
    size: self.texture_size[0]+20, self.texture_size[1]+20
    y: 50

    canvas.before:
        Color:
            rgba: self.bcolor

        Rectangle:
            pos: self.pos
            size: self.size

Subtitle文件中的班级subtitle.kv来自Label,用于在视频播放器中显示字幕(播放器项目是一个教程,其中包含了书。)

bcolor用于video.py中的Python代码,用于更改字幕的不透明度。

def display_subtitle(self, sub):
    self.sub = sub
    self.slabel.text = sub['content']
    self.slabel.bcolor = .1, .1, .1, .8

可以找到完整代码herehere

最后两行更改了名为Subtitle的{​​{1}}实例的属性。编写代码时,它不会运行。错误:

slabel

[WARNING] stderr: 11: Color: [WARNING] stderr: >> 13: rgba: self.bcolor [WARNING] stderr: 14: [WARNING] stderr: 15: Rectangle: [WARNING] stderr: ... [WARNING] stderr: TypeError: 'NoneType' object is not iterable 等于self.bcolor的原因是什么?

Python 3.6.1 - Kivy 1.10.0 - Windows 7(64位)

1 个答案:

答案 0 :(得分:0)

花了一些时间才找到解决方案(这是学习Kivy的书),所以如果你拼命搜索,你可能会喜欢这篇文章...

df1=df[['X','Y']].apply(sorted,1) df.groupby([df1.X,df1.Y])['count'].sum().reset_index(name='count') Out[400]: X Y count 0 A B 3 1 C D 8 必须是Kivy属性,这可以在Python代码中完成。由于没有与kv文件关联的py文件,因此可以在bcolor中使用Subtitle的地方完成。必须使用Python语法声明该类。我将基类声明从kv移到py(所以我从kv文件中的video.py删除了@Label并将其添加到<Subtitle@Label>中:

video.py

并且有效:

enter image description here