Kivy 简明教程
Kivy - Slider
在 Kivy 框架中,Slider 小部件在要设置连续可变数值属性的值时是一个非常有用的控件。例如,电视屏幕或移动设备或扬声器声音的亮度。
滑块小部件的外观是,有旋钮在其上滑动以设置值,是水平或垂直栏。当旋钮在水平滑块的左侧时,它对应于一个最小值;当它在极右侧时,它对应于一个最大值。
Slider 类在“kivy.uix.slider”类中定义。
from kivy.uix.slider import Slider slider = Slider(**kwargs)
要在 Kivy 中创建一个基本滑块控件,我们可以使用以下代码 −
from kivy.uix.slider import Slider
s = Slider(min=0, max=100, value=25)
滑块控件的默认方向为水平。如需要,设置 orientation='vertical' 。您应该在 Kivy 应用程序窗口上获得如下所示的滑块。
可以使用鼠标或触控(在触摸屏上)沿滑块移动旋钮。
要根据滑块值的更改调用某个操作,将值属性绑定到某个回调。
def on_value_changed(self, instance, val):
print (val)
s.bind(value = on_value_changed)
以下是 Slider 类的部分重要属性 −
-
max − 允许的最大值。max 是一个 NumericProperty,默认为 100。
-
min − 允许的最小值。min 是一个 NumericProperty,默认为 0。
-
orientation − 滑块的方向。orientation 是一个 OptionProperty,默认为 'horizontal'。可以取 'vertical' 或 'horizontal' 的值。
-
padding − 滑块的内边距。内边距用于图形表示和交互操作。它可防止光标超出滑块边框的范围。padding 是一个 NumericProperty,默认为 16sp。
-
range − 滑块的范围格式为 (最小值,最大值) 是 (min, max) 属性的 ReferenceListProperty。
-
sensitivity − 触摸是与小部件的整个主体产生碰撞还是仅与滑块的处理手柄部分发生碰撞。sensitivity 是 OptionProperty,默认为“全部”。可采用“全部”或“处理程序”的值。
-
step − 滑块的步长。决定滑块在 min 和 max 之间采取的每个间隔或步骤的大小。step 是 NumericProperty,默认为 0。
-
value − 滑块使用的当前值。value 是 NumericProperty,默认为 0。
-
value_track − 决定滑块是否应绘制指示 min 和 value 属性值之间的空间的线。这是一个 BooleanProperty,默认为 False。
-
value_track_color − value_line 的颜色采用 rgba 格式。value_track_color 是 ColorProperty,默认为 [1, 1, 1, 1]。
-
value_track_width − 轨道线的宽度,默认为 3dp。
Example
在下面的代码中,我们使用三个滑块小部件允许用户为所需颜色设置 RGB 值。滑块的值用于更改 RGB 值。例如,RED 滑块变化会设置“r”分量值 −
def on_red(self, instance, val):
self.r = int(val)/255
self.colour=[self.r, self.g, self.b, self.t]
self.redValue.text = str(int(val))
还编码了针对 Green 和 Blue 的类似回调。这些值被赋予 colur 变量的值,该变量是 ColorProperty 类型。它绑定到 Label 小部件的颜色属性。
colour = ColorProperty([1,0,0,1])
def on_colour_change(self, instance, value):
self.ttl.color=self.colour
结果,通过滑块设置 RGB 值会改变 Label 的文本颜色。
三个滑块控件与必需的标签一起被放置在一个包含四列的内部网格布局中。包含一列的上层网格容纳一个标签,标签的颜色将根据滑块的移动而改变。
complete code 如下所示 -
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.slider import Slider
from kivy.uix.label import Label
from kivy.properties import ColorProperty, NumericProperty
from kivy.core.window import Window
Window.size = (720, 400)
class SliderExample(App):
r = NumericProperty(0)
g = NumericProperty(0)
b = NumericProperty(0)
t = NumericProperty(1)
colour = ColorProperty([1, 0, 0, 1])
def on_colour_change(self, instance, value):
self.ttl.color = self.colour
def on_red(self, instance, val):
self.r = int(val) / 255
self.colour = [self.r, self.g, self.b, self.t]
self.redValue.text = str(int(val))
def on_green(self, instance, val):
self.g = int(val) / 255
self.colour = [self.r, self.g, self.b, self.t]
self.greenValue.text = str(int(val))
def on_blue(self, instance, val):
self.b = int(val) / 255
self.colour = [self.r, self.g, self.b, self.t]
self.blueValue.text = str(int(val))
def build(self):
maingrid = GridLayout(cols=1)
self.ttl = Label(
text='Slider Example',
color=self.colour, font_size=32
)
maingrid.add_widget(self.ttl)
grid = GridLayout(cols=4)
self.red = Slider(min=0, max=255)
self.green = Slider(min=0, max=255)
self.blue = Slider(min=0, max=255)
grid.add_widget(Label(text='RED'))
grid.add_widget(self.red)
grid.add_widget(Label(text='Slider Value'))
self.redValue = Label(text='0')
grid.add_widget(self.redValue)
self.red.bind(value=self.on_red)
grid.add_widget(Label(text='GREEN'))
grid.add_widget(self.green)
grid.add_widget(Label(text='Slider Value'))
self.greenValue = Label(text='0')
grid.add_widget(self.greenValue)
self.green.bind(value=self.on_green)
grid.add_widget(Label(text='BLUE'))
grid.add_widget(self.blue)
grid.add_widget(Label(text='Slider Value'))
self.blueValue = Label(text='0')
grid.add_widget(self.blueValue)
self.blue.bind(value=self.on_blue)
self.bind(colour=self.on_colour_change)
maingrid.add_widget(grid)
return maingrid
root = SliderExample()
root.run()