Определить временной интервал между mousePress и mouseMove для события перетаскивания в RxPy - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь реализовать функцию перетаскивания.Макет моего пользовательского интерфейса выглядит примерно так:

 --- --- ---
| 1 | 2 |   |
 --- ---  5 |
| 3 | 4 |   |
 --- --- ---

Боксы 1, 2, 3 и 4 являются изображениями и будут иметь белую рамку, окружающую их, когда их выберет пользователь.Это действие выбора выполняется с помощью left press.

. Во вставке 5 отображается некоторая основная информация о выбранном изображении.

Изображения в ячейках 1, 2, 3 и 4 можно перетаскивать и отбрасывать.в поле 5. При успешном удалении миниатюра отброшенного изображения также будет отображаться в окне 5.

У меня нет проблем с выполнением действия перетаскивания, которое достигается с помощью RxPy.Мой код для перетаскивания выглядит следующим образом:

drag_start = self.viewer.events \
    .filter(lambda ev: ev.type == MouseEventType.LeftPress)

drag_move = self.viewer.events \
    .filter(lambda ev: ev.type == MouseEventType.MouseMove)

drag = drag_start \
    .flat_map(lambda ev: \
        drag_move \
        .first()
    )

drag.subscribe(lambda ev: self.start_drag())

# and yes, i do not have a takeUntil mouse release event in my stream. this is done intentionally.

У меня есть миниатюра, реализованная в start_drag, которая следует везде, куда движется курсор.я пропустил эту часть кода, поскольку она не является основным моментом проблемы, с которой я сталкиваюсь.

Проблема, с которой я столкнулся, заключается в следующем.Если бы мне нужно было выбрать изображение, и независимо от того, сколько позже я сделаю mouse move, start_drag будет запущено и создаст миниатюру.если событие mouse move происходит после определенного периода времени с момента последнего left press, оно не должно рассматриваться как событие перетаскивания и не вызывает start_drag.Вместо этого «мгновенное» left press + mouse move событие будет рассматриваться как событие перетаскивания

, которое следует добавить в мой поток событий, чтобы я мог определить продолжительность между left pressи mouse move события?впоследствии, если эта длительность превышает временные рамки, я буду игнорировать и не запускать start_drag.или есть лучшее решение этой проблемы?

delay, debounce в основном либо толкает, либо задерживает поток, и я не могу добиться того, чего хочу с этими операторами.

...