我试图在双击/点击注册后将滑块重置为默认值。
我的问题:检查double_tap并与正确的小部件发生冲突后,我在小部件的on_touch_down
回调中重置了小部件的值。设置小部件的值会引发on_value
事件。但这是以某种方式完成的两次。一次使用默认值,再一次使用旧的(默认值),这根本不会改变滑块的值。
我的设置:我有一个滑块,可在拖动时将其值打印到控制台。释放后,滑块的值将继续显示。双击该值应将其重置为默认值(此处为0)。 kv文件中的滑块定义如下:
Slider:
id: sld_light
name: 'Light-brightness-slider'
size_hint: 1, .8
min: 0
max: 100
step: 14.25
orientation: 'vertical'
on_value: root.on_slider_value_changed(*args)
on_touch_up: root.on_slider_touch_up(*args)
on_touch_down: if self.collide_point(*args[1].pos): root.on_slider_touch_down(*args)
回调定义如下:
def on_slider_value_changed(self, instance, value):
print('New value is {}'. format(value))
self.slider_changed = instance
def on_slider_touch_up(self, instance, mouse_motion_event):
if self.slider_changed is not None:
print("{} value: {}".format(self.slider_changed.name, self.slider_changed.value))
self.slider_changed = None
def on_slider_touch_down(self, instance, touch):
if touch.is_double_tap:
print('DoubleTap registered on {}. Value is {}. Setting to: 0'.format(instance.name, instance.value))
instance.value = 0
我的测试用例::我单击滑块并将其拖动。一旦达到所需的值,我就释放滑块。然后,我双击它以将滑块恢复为其默认值0。这是控制台输出:
New value is 14.25
New value is 28.5
New value is 42.75
New value is 57.0
Light-brightness-slider value: 57.0
DoubleTap registered on Light-brightness-slider. Value is 57.0. Setting to: 0
New value is 0
New value is 57.0
Light-brightness-slider value: 57.0
如您所见,值在拖动过程中会发生变化,一旦释放,Light-brightness-slider
值就会打印出来。双击滑块,将收到一个on_touch_down
事件,其中包含正确的来源和正确的来源值。但是现在输出表明,on_value
事件如上所述被调用了两次。
最后,on_touch_up
事件得到了正确的处理。
我不知道为什么会这样。有什么想法吗?