查看原文
其他

【干货】PsychoPy中的鼠标点击

Ryan11 Ryan聊心理 2022-10-07



关于鼠标点击真的是一个热度很高的话题啊。前几天在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的后记



来都来了,确定不点个“在看”再走嘛~↓↓↓↓

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存