规范:
- 使用 PsychoPy v1.90.3
- 运行 Windows 10 的 Window 10 Pro 6
背景: 我正在编写一个用于 child 的触摸屏任务(下面链接的引用图片)。在任务中, children 需要按住屏幕底部的红色“主页”按钮 1.5 秒以推进试验(即打开屏幕顶部的窗口以显示他们可以打开的框)。我还收集了鼠标按钮被按下和释放的时间(用于计算响应时间)。 我最初使用鼠标在我的桌面上编写此任务,因此使用此代码按住主页按钮没有问题:
mouse = event.Mouse(visible=True)
while not homePressed:
if mouse.isPressedIn(home) and home.contains(mouse):
core.wait(1.5, hogCPUperiod=1.5) ## when home button is pressed, wait for 1.5s
if mouse.isPressedIn(home) and home.contains(mouse): ## check if home button is still pressed
homePressed=True
当我尝试在 Surface Pro 上运行该任务时,我遇到了触摸屏未注册“按住”的问题。我了解到,除非按下并释放屏幕,否则触摸屏不会记录鼠标点击,因为按住可能是 (1) 右键单击或 (2) 滑动。我试过在 Surface Pro 上禁用“按住”注册为右键单击选项,但这并没有解决我的问题。
问题:
- 有没有办法让 Surface Pro 或 PsychoPy 像使用鼠标一样在触摸屏上注册按住,以便 child 按下“主页”按钮继续试验?
- 如果是,我能否让 PsychoPy 以与鼠标点击相同的方式输出“按下”(当触摸屏幕时)和“释放”(当触摸不再存在时)输出?
- 如果这不能通过 PsychoPy 库完成,是否有我可以尝试的 PsychoPy 之外的 Python 解决方案?
尝试过的解决方案:
仅使用
home.contains(mouse)解决方案 found here重置鼠标位置解决方案found here
修复“双击”问题解决方案 found here
禁用 Surface Pro 的触摸右键功能
请您参考如下方法:
您可以尝试自己编写一个循环来检查保持时间。例如,在凝视条件研究中,我们有循环来检查某人注视某物的时间,类似于您的“保持”变量。
tCueOn=expClock.getTime()
while True:
curtime=expClock.getTime()-tCueOn
eventType=eyelink.getNextData()
sample=eyelink.getNewestSample()
<<... a bunch of sample processing cut out ...>>
if curtime>=cueTime:
break
在您的情况下,您检测到压力机,获取时间,然后进入循环,在该循环中您反复检查压力机状态是否仍然为真并且时间是否小于 1.5。当它超过 1.5 时,你会打破循环,或者如果他们让步小于 1.5,你会返回到你的用例中你需要的任何地方。您可能会发现将此逻辑捆绑在一个函数中很方便,只要“按主页”为真,您就可以调用该函数。
希望这有帮助,干杯。
