为什么当我尝试更改背景颜色时出现错误?Python Kivy

Why I get error when I try to change background color?Python Kivy

所以我想用这段代码每 5 秒更改一次背景颜色

#:import C kivy.utils.get_color_from_hex
<TrainingTiming>
    FloatLayout:
            canvas.before:
                Color:
                    rgba: C(root.color)
                Rectangle:
                    pos: self.pos
                    size: self.size

我在我的 .py 文件中通过 StringProperty 定义了 root.color,但我得到了这个错误

Exception ignored in: 'kivy.graphics.instructions.RenderContext.set_state'
 Traceback (most recent call last):
   File "kivy\graphics\shader.pyx", line 245, in kivy.graphics.shader.Shader.set_uniform
   File "kivy\graphics\shader.pyx", line 284, in kivy.graphics.shader.Shader.upload_uniform
 IndexError: list index out of range

我的应用程序可以运行,但出现此错误,我不知道该怎么办

程序示例

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import StringProperty
from kivy.clock import Clock

Colors = ['#f6f946', '#21ac2f', '#d31010']

class TrainingWindow(Screen):
    color = StringProperty()

    def on_enter(self):
        self.colorsnum = 0
        self.schedule = Clock.schedule_interval(self.updatelabel, 5)

    def updatelabel(self, dt):
        global Colors
        if self.colorsnum < len(Colors):
            self.color = Colors[self.colorsnum]
            self.colorsnum += 1

kv = Builder.load_file("main.kv")

class MyApp(App):
    def build(self):
        return kv

if __name__ == "__main__":
    MyApp().run()

问题是您将颜色定义为:

color = StringProperty()

这会导致 color 是一个空字符串,从而导致 kivy.utils.get_color_from_hex() 生成一个空列表。 kv:

rgba: C(root.color)

然后将 rgba 设置为 [],导致 IndexError: list index out of range

修复方法是使用默认的十六进制颜色字符串定义 root 属性。例如:

color = StringProperty('#d31010')