如果 int 大于 22,则更改 kivy 中的标签颜色

Changing the Label Color in kivy if an int is bigger than 22

所以我想在 kivy 中更改标签的颜色,如果某个变量大于 22 我尝试了所有方法, 应该是这样工作的。 就像如果 ZZ 大于 22,标签颜色为红色,如果它小于 22,标签颜色为绿色,在代码示例中,我将其清除为数字 40 的 str 这是我的代码希望你能帮助我。

import kivy
import requests
import json
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.properties import StringProperty
from kivy.properties import ListProperty

Builder.load_string("""
<MySec>:
    rgba1: (1,.2,.2,.2)
    GridLayout:
        cols: 1
        size: root.width,root.height
        GridLayout:
            Label:
                id: kv_sec1
                text: root.string1
                font_size: 30
                canvas.before:
                    Color:
                        rgba: root.rgba1
""")


class MySec(BoxLayout):
    string1 = StringProperty('')


class MyApp(App):
    def build(self):
        Clock.schedule_interval(lambda dt: self.update_time(), 0)
        return MySec()

    def update_time(self):
        global ZZ
        ZZ = 40 #"minimal reproducible example"
        self.root.string1 = str(ZZ)


    def Temp(self, instance):
        ZZ = int(self.ZZ)
        if ZZ > 22:
            self.rgba4 = [0.,1.,0.,1.] #gruen
        else:
            self.rgba4 = [1.,0.,0.,1.] #root


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

如果我正确理解了您的问题,那么您想根据某个值(可能是 ZZ)更改文本颜色(颜色)。

为此,首先为 MyApp 中的 ZZ 创建一个 NumericProperty(假设 ZZ 只接受数字)。有了它,您就可以在代码中的任何地方使用它。

现在,如果标签的文本只是 ZZ 的这个值,则将其设置为 text: str(app.ZZ)。现在绑定它的 color 属性。取决于这个值。这样做的一种方法就像 color: [0.,1.,0.,1.] if app.ZZ > 22 else [1.,0.,0.,1.].

经过更多更改,您的代码现在应该如下所示,

import kivy
import requests
import json
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.properties import (
    StringProperty,
    NumericProperty,
    ListProperty
)

Builder.load_string("""
<MySec>:
    rgba1: (1,.2,.2,.2)
    GridLayout:
        cols: 1
        size: root.width,root.height
        GridLayout:
            Label:
                id: kv_sec1
                text: str(app.ZZ)
                font_size: 30
                color: [0.,1.,0.,1.] if app.ZZ > 22 else [1.,0.,0.,1.]

""")


class MySec(BoxLayout):
    string1 = StringProperty('')


class MyApp(App):
    ZZ = NumericProperty(1)

    def build(self):
        Clock.schedule_interval(self.update_time, 0.5)
        return MySec()

    def update_time(self, *args):
        self.ZZ *= -2


    def Temp(self, instance):
        ZZ = int(self.ZZ)
        if ZZ > 22:
            self.rgba4 = [0.,1.,0.,1.] #gruen
        else:
            self.rgba4 = [1.,0.,0.,1.] #root


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

:

这里没有使用方法Temp。当然还有其他方法可以做到这一点。