Python Kivy:从on_touch_down事件更改滑块小部件的值

时间:2018-09-05 06:04:28

标签: python-3.x events slider kivy

我试图在双击/点击注册后将滑块重置为默认值。

我的问题:检查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事件得到了正确的处理。

我不知道为什么会这样。有什么想法吗?

0 个答案:

没有答案