更改 Kivy 滑块颜色

Change Kivy Slider Color

是否可以完全自定义 Kivy 滑块?具体如何更改滑块背景颜色,添加滑块"fill"颜色,自定义旋钮image/color?

整个星期我都在苦苦挣扎,因为网上没有太多关于 Kivy 风格定制的东西,所以我决定 post 这个 question/answer 在这里供其他人使用。事实证明,您需要为 Slider 重写 Kivy 样式 class。

使用 Kivy's GitHub repo 中的默认样式 sheet,我找到了默认样式 Slider class。然后我在 Slider class 下创建了 canvas 孩子的 ColorBorderImage children,复制现有的孩子开始。请记住,Color 适用于下一个 children,因此如果要完全修改 Slider,则 canvas 下总共需要 5 个 children。另外,我必须修改 BorderImagesize 属性,以便它在您移动 knob.

时动态变化

如果您只对添加 "fill" 颜色感兴趣,这是我的代码:

from kivy.lang import Builder

Builder.load_string('''
<Slider>:
    canvas:
        Color:
            rgb: 0, 0, 0
        BorderImage:
            border: (0, 18, 0, 18) if self.orientation == 'horizontal' else (18,
 0, 18, 0)
            pos: (self.x + self.padding, self.center_y - sp(18)) if self.orienta
tion == 'horizontal' else (self.center_x - 18, self.y + self.padding)
            size: (max(self.value_pos[0] - self.padding * 2 - sp(16), 0), sp(36)
) if self.orientation == 'horizontal' else (sp(36), max(self.value_pos[1] - self
.padding * 2 - sp(16), 0))
            source: 'atlas://data/images/defaulttheme/slider{}_background{}'.format(self.orientation[0], '_disabled' if self.disabled else '')
''')

当然,您可以轻松地将字符串移动到 .kv 文件中。如果您需要其他两个自定义的示例,请告诉我,但它们可以类似地完成。