Я пытаюсь реализовать функцию перетаскивания.Макет моего пользовательского интерфейса выглядит примерно так:
--- --- ---
| 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
в основном либо толкает, либо задерживает поток, и я не могу добиться того, чего хочу с этими операторами.