我正在尝试创建一个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具有相同的颜色(除非已选择),并且我想为停止的服务设置红色,为启动服务设置绿色。
我该怎么做?
谢谢=)
答案 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