更改 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
孩子的 Color
和 BorderImage
children,复制现有的孩子开始。请记住,Color
适用于下一个 children,因此如果要完全修改 Slider
,则 canvas
下总共需要 5 个 children。另外,我必须修改 BorderImage
的 size
属性,以便它在您移动 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
文件中。如果您需要其他两个自定义的示例,请告诉我,但它们可以类似地完成。
是否可以完全自定义 Kivy
滑块?具体如何更改滑块背景颜色,添加滑块"fill"颜色,自定义旋钮image/color?
整个星期我都在苦苦挣扎,因为网上没有太多关于 Kivy
风格定制的东西,所以我决定 post 这个 question/answer 在这里供其他人使用。事实证明,您需要为 Slider
重写 Kivy
样式 class。
使用 Kivy
's GitHub repo 中的默认样式 sheet,我找到了默认样式 Slider
class。然后我在 Slider
class 下创建了 canvas
孩子的 Color
和 BorderImage
children,复制现有的孩子开始。请记住,Color
适用于下一个 children,因此如果要完全修改 Slider
,则 canvas
下总共需要 5 个 children。另外,我必须修改 BorderImage
的 size
属性,以便它在您移动 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
文件中。如果您需要其他两个自定义的示例,请告诉我,但它们可以类似地完成。