在运行时用Kivy改变画布的颜色

时间:2017-01-31 11:26:19

标签: python kivy

我想在跑步时改变画布的颜色。

画布的颜色应为:

  • 如果len(inputtext)%3 == 0
  • ,则为红色
  • 绿色如果len(inputtext)%3 == 1
  • 蓝色如果len(inputtext)%3 == 2

我不知道如何在下面的代码中编写color()方法:

kv ="""
RootWidget:
    orientation: 'vertical'

    TextInput:
        id: my_id
        text: 'text'
        on_text: root.color()

    Label:
        id: my_Label
        text: ' '
        canvas.before:
            Color:
                rgb: (1., 1., 0.)
            Rectangle:
                size: self.size
                pos: self.pos
"""

import kivy
kivy.require('1.8.0')

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout

class RootWidget(BoxLayout):

    def __init__(self):
        super().__init__()

    def color(self):
        pass  # <-- here

class TestApp(App):
    def build(self):
        return Builder.load_string(kv)

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

1 个答案:

答案 0 :(得分:2)

这是一个解决方案:)只需添加一个定义标签颜色的属性(在kv中)。然后在color方法中,只需相应地设置此属性。

import kivy
kivy.require('1.8.0')

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout



kv = """
RootWidget:
    orientation: 'vertical'

    TextInput:
        id: my_id
        text: 'text'
        on_text: root.color(self.text)

    Label:
        id: my_Label
        col: (1., 1., 0.)
        text: ' '
        canvas.before:
            Color:
                rgb: self.col
            Rectangle:
                size: self.size
                pos: self.pos
"""

class RootWidget(BoxLayout):

    def __init__(self, **kwargs):
        super().__init__(**kwargs)

    def color(self, inputtext):
        if len(inputtext)%3 == 0:
            col = (1,0,0)
        elif len(inputtext)%3 == 1:
            col = (0,1,0)
        else:
            col = (0,0,1)
        self.ids.my_Label.col = col

class TestApp(App):
    def build(self):
        return Builder.load_string(kv)

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