画布颜色绑定到属性(Kivy book):TypeError:“NoneType”对象不是iterab

2024-04-28 23:16:20 发布

您现在位置:Python中文网/ 问答频道 /正文

这段代码在Roberto Ulloa的《Kivy——Python中的交互式应用程序和游戏》(interactiveapplications and Games in 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.kv文件中的类Subtitle是从Label派生的,用于在视频播放器中显示字幕(播放器项目是一个教程,它占用了本书的整个章节)

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

^{pr2}$

完整的代码可以找到herehere。在

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

^{3}$

为什么self.bcolor等于None?在


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


Tags: 代码posself应用程序sizehere播放器label
1条回答
网友
1楼 · 发布于 2024-04-28 23:16:20

我花了一些时间才找到解决方案(这是一本学习Kivy的书),所以如果你拼命搜索,你可能会很感激这篇文章。。。在

bcolor必须是Kivy属性,这可以在Python代码中完成。因为没有与kv文件相关联的py文件,所以可以在使用Subtitle的地方,在video.py中完成。必须使用Python语法声明类。我将基类声明从kv移到py(因此我从kv文件中的@Label<Subtitle@Label>中删除,并在video.py中添加了以下内容:

...
Builder.load_file('video.kv')
Builder.load_file('subtitle.kv')

class Subtitle(Label):                   <       
    bcolor = ListProperty(None)          <       

class Video(KivyVideo):
    image = ObjectProperty(None)
    surl = StringProperty(None)

    def on_state(self, instance, value):
    ...

这很管用:

enter image description here

相关问题 更多 >