如何动态改变kivy python中的画布颜色?

And*_*rey 2 python canvas colors kivy

目的是当用户按下按钮时改变kivy中笔的颜色。颜色将更改为按钮的背景颜色。画布代码:

def on_touch_move(self,color,touch):
    with self.pc.canvas:
        global wtd,pencolor
        Color(pencolor)
        if wtd == 1:
            Ellipse(pos=(touch.x,touch.y),size=(penrad,penrad))
Run Code Online (Sandbox Code Playgroud)

绑定到按钮的 on_press 代码:

def newclr(self,instance):
    global pencolor
    pencolor = instance.background_color
    self.on_touch_move
    return pencolor
Run Code Online (Sandbox Code Playgroud)

按钮事件正常工作!

iko*_*lim 7

解决方案

提供颜色的模式(rgb、rgba)。颜色(pencolor)替换为颜色(rgba=pencolor)

详细请参考下面的演示。笔的颜色开始为红色,然后变为白色,即按钮的背景颜色。

例子

主要.py

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import ListProperty, NumericProperty
from kivy.graphics import *


class MyWidget(Widget):
    wtd = NumericProperty(1)
    penrad = NumericProperty(10)
    pencolor = ListProperty([1, 0, 0, 1])  # Red

    def newclr(self, instance):
        print("Before Change@newclr: pencolor=", self.pencolor)
        self.pencolor = instance.background_color
        print("After Change@newclr: pencolor=", self.pencolor)

    def on_touch_move(self, touch):
        print("on_touch_move: touch=", touch)
        print("on_touch_move: pencolor=", self.pencolor)
        with self.canvas:
            Color(rgba=self.pencolor)
            if self.wtd == 1:
                Ellipse(pos=(touch.x, touch.y), size=(self.penrad, self.penrad))


class TestApp(App):
    title = "Kivy - Change Pen Colour"

    def build(self):
        return MyWidget()


if __name__ == "__main__":
    TestApp().run()
Run Code Online (Sandbox Code Playgroud)

测试.kv

#:kivy 1.10.0

<CustomButton>:

<MyWidget>:
    canvas.before:
        Color:
            rgba: 0, 0, 1, 1    # Blue
        Rectangle:
            pos: self.pos
            size: self.size
    Button:
        text: "Change Pen Color"
        size: 150, 100
        size_hint: None, None
        on_press: root.newclr(self)
Run Code Online (Sandbox Code Playgroud)

输出

Img01 - 应用程序启动 Img02 - 红笔 Img03 - 单击按钮后的白色笔