【问题标题】:Recording the time of the start of a screen touch in PsychoPy on Windows在 Windows 上的 PsychoPy 中记录屏幕触摸开始的时间
【发布时间】:2015-06-15 16:17:56
【问题描述】:

我正在帮助实施一个在 Windows 8 平板电脑上使用 PsychoPy 的实验。似乎无法通过 PsychoPy 或 pyglet 或 PyGame 接口直接访问触摸事件。

我发现的大多数其他来源都提到使用鼠标移动事件代替触摸事件。这对于记录位置很有效,但对于记录时间,它对我们不起作用。我们想收集触摸开始的时间,而鼠标事件发生在触摸结束时。

有谁知道这样做的方法,无论是在 PsychoPy 中还是通过将另一个库导入到实验中?

更新:记录 ioHub 鼠标事件,看起来按下和释放鼠标事件都在触摸结束时发送。这是有道理的,因为这是操作系统确定触摸不是滑动的点。 (另外,它会根据触摸的持续时间来决定触摸是左键还是右键)。

【问题讨论】:

  • 你用什么来记录鼠标事件...你能不能换成<Mouse1-Down>而不是<Mouse1-Click>?。
  • 您看过psychopy.iohub,它明确区分了新闻和发布事件吗?有一个 elo 触摸屏的演示(Coder --> Demos --> ioHub --> elotouchscreen)。如果这不起作用,它可能会注册为鼠标事件,在这种情况下,您还会将按下和释放事件分开(参见 Coder --> 演示 --> ioHub --> 鼠标)。演示相当复杂,所以让我知道它们是否有效,我可以针对您的问题发布更明确的解决方案。
  • @JonasLindeløv 谢谢。该代码目前正在通过 PsychoPy 使用 pyglets 鼠标事件。屏幕上的触摸似乎对应于鼠标 move,而不是 click,因此鼠标向下/向上可能不起作用——我应该调查 iohub 事件并查看哪个生产的。我查看了 ELO 触摸屏代码,它似乎与我们的情况大不相同。它是一个单独的硬件设备,必须通过外部端口显式查询。我们有一个内置屏幕(通过操作系统)应该已经生成 WM_GESTURE / WM_TOUCH 消息——问题是如何获取它们!
  • 是的,当您确定生成了哪些 iohub 事件后返回。只需在使用鼠标时执行(1)from psychopy import iohub, core、(2)io = iohub.launchHubServer()、(3)core.wait(5) 之类的操作,(4)print io.devices.mouse.getEvents()
  • @JonasLindeløv 我已将此添加到我原来的问题中,不幸的是,正如我所怀疑的那样。

标签: python windows touchscreen psychopy


【解决方案1】:

我在 WndProc 中使用了一个钩子来管理它,它不是很漂亮,但它可以工作。后人的解决方案:

https://github.com/alisdt/pywmtouchhook

简要总结:

我使用了 ctypes 和 pywin32 的组合(不幸的是,两者都无法完成这项工作)来注册目标 HWND 以接收触摸消息,并替换其 WndProc,将所有非触摸消息传递给原始 WndProc。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多