Python kivy: изменить значение виджета слайдера из события on_touch_down - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь вернуть ползунку значение по умолчанию после регистрации двойного щелчка / нажатия.

Моя проблема: После проверки 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 -вент обрабатывается правильно.

Понятия не имею, почему это происходит. Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...