确定mousePress和mouseMove之间的时间范围,以进行RxPy中的拖动事件

时间:2018-10-25 16:20:09

标签: python-3.6 rx-py

我正在尝试实现拖放功能。我的用户界面的布局类似于以下内容:

 --- --- ---
| 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 pressmouse move事件之间的持续时间?随后,如果此持续时间超过时间范围,我将忽略并且不触发start_drag。还是有更好的解决方案来解决这个问题?

delaydebounce基本上会推动或延迟流,而我无法用这些运算符实现我想要的功能。

0 个答案:

没有答案