Я пытаюсь вернуть ползунку значение по умолчанию после регистрации двойного щелчка / нажатия.
Моя проблема: После проверки double_tap и столкновения с правильным виджетом я сбрасываю значение виджета в обратном вызове on_touch_down
виджета. Установка значения виджета поднимает on_value
-Event. Но это как-то сделано два раза. Один раз со значением по умолчанию и еще раз со старым (предустановленным) значением, которое вообще не приводит к изменению значения ползунка.
Мои настройки: У меня есть ползунок, который печатает его значение на консоли во время перетаскивания. После освобождения значение ползунка прогрессирует. При двойном щелчке значение должно быть сброшено до значения по умолчанию (здесь: 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
-вент обрабатывается правильно.
Понятия не имею, почему это происходит. Есть идеи?