我要在Kivy's Clock上更改标签颜色

时间:2018-10-10 19:36:47

标签: python kivy

我想通过打发时间来更改文本颜色。 我使用Python和kivy。 这是我的代码。在此代码中,只有标签出现。

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.clock import Clock
import random

class MyLabel(Label):
    def callback(self, *arg):
        self.evt = Clock.schedule_interval(self.callback, 1)

    def on_value(self, *arg):
        self.parent.lbl.color = random.choice(['red','blue','black'])


class MyApp(App):
    def build(self):
        layout=BoxLayout()
        layout.lbl = Label(text='NESIA')
        layout.add_widget(layout.lbl)
        return layout

MyApp().run()

`

1 个答案:

答案 0 :(得分:1)

您永远不会调用您定义的on_value()方法。您可以做的是在构建应用程序时使用Clock.schedule_interval(),并传入改变标签颜色和间隔的调用方法,如下所示:

from kivy.app import App
from kivy.uix.label import Label
from kivy.clock import Clock
from kivy.uix.boxlayout import BoxLayout
import random

class MyLabel(Label):
    def change_color(self, *args):
        r, g, b = random.choice([[1, 0, 0],[0,0,1],[ 1, 1, 1]])
        self.color = [r, g, b, 1]

class MyApp(App):
    def build(self):
        layout = BoxLayout()
        label = MyLabel(text='NESIA')
        Clock.schedule_interval(label.change_color, 1)
        layout.add_widget(label)
        return layout

MyApp().run()

这是假设您想要的是一个带有文本NESIA的标签,其颜色每秒随机设置为红色,蓝色或黑色。请注意,random.choice()可能连续两次返回相同的颜色,这意味着不管发生多少秒,它都不会改变。