设置Kivy Svg的颜色

时间:2017-05-13 18:22:52

标签: svg kivy

我的印象是svg像画布指令一样工作。 但是,我无法让svg改变颜色。以下代码的一部分是使用Kivy' github中的示例中提供的代码。

with self.canvas:
     Color(0.3833, 1.0, 0.0)

整个代码

import sys
from glob import glob
from kivy.uix.scatter import Scatter
from kivy.app import App
from kivy.graphics.svg import Svg
from kivy.core.window import Window
from kivy.uix.floatlayout import FloatLayout
from kivy.lang import Builder
from random import randint
from kivy.graphics import *

Builder.load_string("""
<SvgWidget>:
    do_rotation: False
<FloatLayout>:
    id: svg_holder
    canvas.before:
        Color:
            rgb: (1, 1, 1)
        Rectangle:
            pos: self.pos
            size: self.size
""")


class SvgWidget(Scatter):

    def __init__(self, filename, **kwargs):
        super(SvgWidget, self).__init__(**kwargs)
        with self.canvas:
            Color(0.3833, 1.0, 0.0)
            svg = Svg(filename)
        self.size = svg.width, svg.height

    def remove(self):
        print('remove', self)


class SvgApp(App):

    def build(self):
        self.root = FloatLayout()

        for i in range(6):

            svg = SvgWidget('star.svg', size_hint=(None, None))
            self.root.add_widget(svg)
            svg.scale = randint(1,4)
            svg.center = randint(0,Window.width), randint(0,Window.height)


if __name__ == '__main__':
    SvgApp().run()

1 个答案:

答案 0 :(得分:1)

我不认为你要求的是可能的,因为Svg包含颜色指令本身,所以它会覆盖你的......也许你的代码可以使用不透明的叠加来制作期望的效果