如何更新kivy中的椭圆颜色?
Posted
技术标签:
【中文标题】如何更新kivy中的椭圆颜色?【英文标题】:How do i update ellipse color in kivy? 【发布时间】:2021-03-15 06:31:32 【问题描述】:如何在 kivy 中更新椭圆颜色?我试过这个
import kivy
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import Rectangle, Color
from kivy.clock import Clock
class Touch(Widget):
def __init__(self, **kwargs):
super(Touch, self).__init__(**kwargs)
self.x=0
with self.canvas:
self.rect= Rectangle(pos= (self.x, 200), size= (3, 30), color=Color(0.9,0.9,0.1,1))
Clock.schedule_interval(self.update, 1/30.)
def update(self, *args):
self.x+=3
self.rect.pos= (self.x, 200)
self.rect.size= (self.x/2, 200)
# self.rect.color= Color(int(self.x/100), 0.9, 0.1, 1)
class My_app(App):
def build(self):
return Touch()
My_app().run()
当我尝试更改位置或大小时它会起作用,但如果我尝试通过不评论此行来更改颜色
# self.rect.color= Color(int(self.x/100), 0.9, 0.1, 1)
会报这个错误
AttributeError: 'kivy.graphics.vertex_instructions.Rectangle' object has no attribute 'color'
如果我们不能更新某个矩形的颜色,有没有合适的方法来更新它?
[编辑] 我从 reddit 得到了答案,结果是,当你输入 Color(r,g,b,a) 时,它正在创建一个新对象,所以如果你分配它,例如:
color= Color(r,g,b,a)
然后你看那个物体的内部
dir(color)
它具有“rgba”属性,当我们更改该属性时,您可以将颜色更改为在该颜色对象仍处于活动状态时创建的任何形状对象。
【问题讨论】:
【参考方案1】:是的,您来自 reddit 的信息是正确的。以下是如何应用它:
class Touch(Widget):
def __init__(self, **kwargs):
super(Touch, self).__init__(**kwargs)
self.x=0
with self.canvas:
self.color = Color(0.9,0.9,0.1,1)
self.rect= Rectangle(pos= (self.x, 200), size= (3, 30))
Clock.schedule_interval(self.update, 1/30.)
def update(self, *args):
self.x+=3
self.rect.pos= (self.x, 200)
self.rect.size= (self.x/2, 200)
self.color.rgb = [self.x/1000., 0, 0, 1]
我已将更新后的rgba
更改为[self.x/1000., 0, 0, 1]
,只是为了让它在运行时更加明显。
【讨论】:
以上是关于如何更新kivy中的椭圆颜色?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据 Widget Kivy 属性更新**动态添加的**椭圆(不使用 Builder)的颜色?