【干货】PsychoPy中的鼠标点击
关于鼠标点击真的是一个热度很高的话题啊。前几天在PsychoPy群里看到有同学提问,如何直接用鼠标点选recall阶段的图画,而不通过rating或者按键实现。
其实关于鼠标点击,用E-prime的讲过不少了,感兴趣的朋友可以在公众号“干货”-“编程”中快速找到相应的教程。那么今天这篇将讲解的是PsychoPy中的鼠标点击。
其实鼠标点击的原理基本上还是一样的,通过判断鼠标点击位置在屏幕上的坐标,与点击对象的坐位置标进行比较,在范围内就是点中了,不在就是没点中。在PsychoPy中这个并不复杂,直接调用相应的方法就能解决。
本篇依然还是讲解的使用PsychoPy的builder模式实现鼠标点击的方法,如果用coder模式的话,可以参考简书上ChZ_CC同学的分享《PsychoPy入门_07_鼠标的使用》(https://www.jianshu.com/p/594b8abc0df6)。
在本篇教程使用的示例文件中,使用了两个不同的方法来实现鼠标点击的结果判断,分别是:isPressedIn() 和 contains()。两者效果一致,只是使用的细节上有所不同。
在示例文件中准备了两个loop,第一个是使用isPressedIn()方法,第二个使用的是contains()方法。
首先,在实验的flow中放置好第一和第二阶段各自的指导语界面和实验循环,其中t1部分为第一阶段初步评分的循环,t2部分为第二阶段提取和混合材料评分的循环。如下图所示:
在trials_1的循环中调用第一个实验材料存储文件condition1.xlsx:
而在condition1.xlsx中,需要放置好呈现在左右两侧的图片刺激和答案。注意这里答案的设置使用的是列名(本来想试一下GIF图,但是发现并不能动……):
在trial1中需要设置好呈现的图片控件,鼠标控件和code:
其中,对于鼠标控件,则需要做如下设置,保证可以点击的控件是界面上的两个图片控件,并且反应时能够正确记录:
在code界面,首先在Begin Routine标签下写上:
读取image_1和image_2两个控件呈现的刺激作为sti这个list的元素。
随后在Each Frame标签下写上:
表示说如果mouse.isPressedIn()这个方法取到了鼠标点击位置的图片材料stimulus,那么记录下点击的时间,同时判断stimulus.image是否是答案列的材料,再记录下正确与否的情况。
另外,使用另一个方法,在trials_2中则调用另一个文件condition2.xlsx:
注意在condition2.xlsx中,答案的部分设置的是图片在界面上呈现的控件名:
在trial2中需要放置的控件和trial1均一致。对应呈现在左边的控件名就是image_3:
这里Begin Routine中写上的内容和前一种方法是一致的:
在Each Frame标签下写入的内容有变化:
表示通过stimulus.contains(mouse_4)取到了图片刺激材料,记录下时间,并且判断stimulus.name是否是答案中的控件名。
在数据文件中,可以看到记录的每个trial的点击详情:
如此这般设置之后,就能够实现鼠标点击和答案记录了。
以上只是最基础的鼠标点击的方法介绍,如果实验比较复杂,比如涉及到刺激材料屏幕位置每个trial要随机变化,点击区域数量每个trial不同等等情况,还需要再修改相应的设置才行。
以上就是本篇推送的教程了。如果对于鼠标点击还有其它的方法建议,也欢迎在评论区留言讨论。
具体的程序示例在“阅读原文”中的可以下载,密码见评论区置顶。如有问题也欢迎留言提问讨论。
看到群里有人提问,就有了更新的动力呀,不然经常不知道要写什么内容……
欢迎有疑问的朋友继续在公众号后台或者微信、微信群上给Ryan留言提问~
祝好!
—Ryan的后记
来都来了,确定不点个“在看”再走嘛~↓↓↓↓