class CanvasExample5(Widget):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.ball_size = dp(50)
        with self.canvas:
            self.color = Color(0, 1, 0)
            self.ball = Ellipse(pos=self.center, size=(self.ball_size, self.ball_size))
        Clock.schedule_interval(self.update, 1/60)
        Clock.schedule_interval(self.colour, 1)
        self.vx = dp(5)
        self.vy = dp(3)

    def on_size(self, *args):
        self.ball.pos = (self.center_x-self.ball_size/2, self.center_y-self.ball_size/2)

    def colour(self, *args):
        random_1 = random.randint(0, 255)
        random_2 = random.randint(0, 255)
        random_3 = random.randint(0, 255)
        self.color = Color(random_1, random_2, random_3)

推荐答案

Ellipse图形命令使用执行时有效的Color,因此之后更改Color不会对Ellipse产生影响.一种解决方法是清除画布,并用新的Color重新绘制Ellipse:

def colour(self, *args):
    random_1 = random.random()
    random_2 = random.random()
    random_3 = random.random()
    self.canvas.clear()
    with self.canvas:
        Color(random_1, random_2, random_3)
        self.ball = Ellipse(pos=self.center, size=(self.ball_size, self.ball_size))

还要注意,Color命令接受0到1之间的值,而不是0到255之间的值.

Python相关问答推荐

两极:如何分割一个大 pyramid 并并行保存每个

如何编写一个正规表达式来查找序列中具有2个或更多相同辅音的所有单词

inspect_asm不给出输出

无法使用python.h文件; Python嵌入错误

如何在BeautifulSoup中链接Find()方法并处理无?

使用FASTCGI在IIS上运行Django频道

比较两个数据帧并并排附加结果(获取性能警告)

为什么tkinter框架没有被隐藏?

重新匹配{ }中包含的文本,其中文本可能包含{{var}

处理(潜在)不断增长的任务队列的并行/并行方法

如何让程序打印新段落上的每一行?

根据二元组列表在pandas中创建新列

如何使用根据其他值相似的列从列表中获取的中间值填充空NaN数据

如何将一个动态分配的C数组转换为Numpy数组,并在C扩展模块中返回给Python

如果条件不满足,我如何获得掩码的第一个索引并获得None?

DataFrames与NaN的条件乘法

在np数组上实现无重叠的二维滑动窗口

Python逻辑操作作为Pandas中的条件

重置PD帧中的值

通过追加列表以极向聚合