如何根据他的值(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
输出
我正在尝试创建一个 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