为什么当我尝试更改背景颜色时出现错误?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')
所以我想用这段代码每 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')