如何根据他的值(RecycleView)为 SelectableLabel 设置特定颜色?

How to set specific color to an SelectableLabel according to his value (RecycleView)?

我正在尝试创建一个 RecycleView,它向我们显示来自远程服务器(通过 winRM 获得)的一系列 windows 服务。然后直接从我工作站中的 kivy 应用程序管理它们(启动、停止、重新启动)。

目前,从远程服务器检索到的每个 Windows 服务都存储在字典中。 key=服务名称,value=服务状态。

例如:[{"Netman" : "Running"}])

我是这样填写 RecycleView 的:

self.rv.data = [{"text":service+" ("+status+")"} for service, status in dictServiceStatus.items()] 

RecycleView 和 SelectableLabel 在 kv 文件中定义如下:


<SelectableLabel>:
    canvas:
        Color:
            rgba: (.51, .153, .255, .3) if not self.selected else (.225, .1, .6, 0.3)
        Rectangle:
            pos: self.pos
            size: self.size

<Services>:

       ...

       RecycleView:
            id: rv
            viewclass: 'SelectableLabel'
            SelectableRecycleBoxLayout:
                height: self.minimum_height
                scroll_wheel_distance: dp(114)
                default_size: None, dp(56)
                default_size_hint: 1, None
                multiselect: False
                size_hint_y: None
                height: self.minimum_height
                orientation: 'vertical'
                spacing: dp(2)     

结果如下所示:


服务 1 (运行)


服务 2(已停止)


服务 3(已停止)

...

但我对此并不满意,因为每个 SelectableLabel 都具有相同的颜色(除非它被选中)并且我想为停止的服务设置红色,为启动服务设置绿色。

我该怎么做?

谢谢=)

使用嵌套的 if...else 语句并在选择标签时检查 self.text 中的特定字符串。

片段

<SelectableLabel>:
    # Draw a background to indicate selection
    canvas.before:
        Color:
            rgba: (1, 0, 0, 1) if self.selected and 'Stopped' in self.text else (0, 1, 0, 1) if self.selected and 'Running' in self.text else (0, 0, 0, 1)
        Rectangle:
            pos: self.pos
            size: self.size

输出