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

时间:2019-07-26 14:45:44

标签: python kivy kivy-language

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

当前,从远程服务器检索到的每个Windows服务都存储在词典中。 键=服务名称,值=服务状态。

例如:[{“ 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)     

结果如下:


Service1(正在运行)


Service2(已停止)


Service3(已停止)

...

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

我该怎么做?

谢谢=)

1 个答案:

答案 0 :(得分:0)

使用嵌套的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

输出

Result