如何在kivy中自定义滑块
How to customize a slider in kivy
我想更改 kivy 滑块的外观。到目前为止,我还没有找到任何属性来更改滚动条和圆圈。我认为它们是通过使用 canvas 操作创建的。
我的设想是通过在可以移动的圆圈下方显示当前值来扩展滑块。
有什么想法吗?
一些代码:
class templPowerSlider():
kivy.lang.Builder.load_string('''
<templPowerSlider@BoxLayout>:
sp: sp
sl: sl
val: val
Spinner:
id: sp
values: ['mW', '%']
text: '%'
size_hint_x: 0.1
on_text: root.onSel(*args)
Slider:
id: sl
size_hint_x: 0.7
TextInput:
id: val
size_hint_x: 0.2
text: "%3.1f" % sl.value
multiline: False
on_text_validate: root.onTextEnter(*args)
''')
def __init__(self, **kwargs):
super(templPowerSlider, self).__init__(**kwargs)
pass
def onSel(self, a, b):
print ('aaa')
def onTextEnter(self, a, b):
print ('bb')
是的,Slider
的UI是在canvas中创建的,没有修改显示的属性。如果愿意,您可以通过覆盖 kv 设计来更改 Slider
的显示方式:
<-MySlider@Slider>:
....
-
告诉 Kivy 忽略以前的规则并从头开始构建这个 MySlider
小部件。如果您只想对显示做一些小的修改,您可以从 style.kv
复制旧规则。
但是,如果要添加值文本,则不一定需要修改现有的 UI。这是我想出的一个简单示例:
<MySlide@Slider>:
Label:
pos: (root.value_pos[0] - sp(16), root.center_y - sp(27)) if root.orientation == 'horizontal' else (root.center_x - sp(27), root.value_pos[1] - sp(16))
size_hint: None, None
size: sp(32), sp(32)
text: str(root.value)
这只是在 Slider
句柄下方添加了一个 Label
。
我想更改 kivy 滑块的外观。到目前为止,我还没有找到任何属性来更改滚动条和圆圈。我认为它们是通过使用 canvas 操作创建的。
我的设想是通过在可以移动的圆圈下方显示当前值来扩展滑块。
有什么想法吗?
一些代码:
class templPowerSlider():
kivy.lang.Builder.load_string('''
<templPowerSlider@BoxLayout>:
sp: sp
sl: sl
val: val
Spinner:
id: sp
values: ['mW', '%']
text: '%'
size_hint_x: 0.1
on_text: root.onSel(*args)
Slider:
id: sl
size_hint_x: 0.7
TextInput:
id: val
size_hint_x: 0.2
text: "%3.1f" % sl.value
multiline: False
on_text_validate: root.onTextEnter(*args)
''')
def __init__(self, **kwargs):
super(templPowerSlider, self).__init__(**kwargs)
pass
def onSel(self, a, b):
print ('aaa')
def onTextEnter(self, a, b):
print ('bb')
是的,Slider
的UI是在canvas中创建的,没有修改显示的属性。如果愿意,您可以通过覆盖 kv 设计来更改 Slider
的显示方式:
<-MySlider@Slider>:
....
-
告诉 Kivy 忽略以前的规则并从头开始构建这个 MySlider
小部件。如果您只想对显示做一些小的修改,您可以从 style.kv
复制旧规则。
但是,如果要添加值文本,则不一定需要修改现有的 UI。这是我想出的一个简单示例:
<MySlide@Slider>:
Label:
pos: (root.value_pos[0] - sp(16), root.center_y - sp(27)) if root.orientation == 'horizontal' else (root.center_x - sp(27), root.value_pos[1] - sp(16))
size_hint: None, None
size: sp(32), sp(32)
text: str(root.value)
这只是在 Slider
句柄下方添加了一个 Label
。