PsychoPy入门_07_鼠标的使用

不靠谱PsychoPy入门教程目录:

  1. PsychoPy入门00安装

  2. PsychoPy入门01文字和图片的呈现

  3. PsychoPy入门02按键等待&反应时

  4. PsychoPy入门03视频和音频的呈现

  5. PsychoPy入门04等级评定

  6. PsychoPy入门05循环和随机

  7. PsychoPy入门06数据记录

  8. PsychoPy入门07鼠标的使用

  9. 用PsychoPy做视觉搜索任务实验


操纵鼠标算是比较好玩而且看上去比较高端一点的技术。在我自己的学习和使用PsychoPy的时候并没有涉及到鼠标,最多用myMouse.setVisible(0)把鼠标变得不可见,以避免它在屏幕上产生干扰。但是后来在帮同学、学妹编程的时候时不时用到一下,所以就尽我所了解的给大家说一下event.Mouse()的用法。

呃,有之前的基础之后应该不需要再拆分步骤一点一点的说了吧。我就把代码一股脑贴出来,关键点解释一下好了。(嗯,就是为自己的懒找借口啦,但是也就这样吧。)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from psychopy import visual, core, event

win = visual.Window(size = [800,600])

#-------------A 卡片选择 -------------------
'''
    这里我建了两个矩形框,一个红色一个绿色。
    当鼠标进入某个矩形框的时候,它的颜色加深,离开则恢复原状。
    两个色块会一直停在屏幕上,直到你点选一个。
    在output去打印出我们所选择的颜色。
'''
# 图形顶点坐标。你可以通过顶点个数和位置控制图形的形状。
card_vert = [[0.2,0.3],[-0.2,0.3],[-0.2,-0.3],[0.2,-0.3]]       

# 建立两个形状刺激。用法和其他视觉刺激差不多。
card_1 = visual.ShapeStim(win, lineColor = None, 
                        fillColor = 'red',              # 填充颜色
                        opacity = 0.3,                  # 透明度
                        vertices = card_vert,           # 矩形的顶点
                        pos = (0.3,0))                  # 位置
card_2 = visual.ShapeStim(win, lineColor = None, 
                        fillColor = 'green', 
                        opacity = 0.3, 
                        vertices = card_vert, 
                        pos = (-0.3,0))

# 创建一个鼠标对象
myMouse = event.Mouse()

while not( myMouse.isPressedIn(card_1) or myMouse.isPressedIn(card_2)):
# 当两个色块都没有被点击的时候循环做以下内容
    choice = 'NONE'
    # 新建变量choice,用来标记鼠标是在红色色块内还是绿色色块内。
    if card_1.contains(myMouse):    # 当红色矩形包含(contains)鼠标时
        card_1.opacity = 0.7        # 不透明度增高。
        choice = 'red'              # choice赋值为“red”
    elif card_2.contains(myMouse):  # 同上
        card_2.opacity = 0.7
        choice = 'green'
    else:                           # 两个矩形都不包含鼠标时
        card_1.opacity = 0.3        # 透明度恢复原值。
        card_2.opacity = 0.3
    card_1.draw()                   # 呈现这两个色块
    card_2.draw()
    win.flip()                      # 刷新屏幕

win.flip()          
#这里是在做出选择之后刷新屏幕,不然的话会停留在之前的界面上。

print choice   # 打印

到这里先运行一下看。鼠标不在两个矩形区域时(背景、颜色什么都是随便选的,比较丑):


PsychoPy入门_07_鼠标的使用_第1张图片

鼠标在红色区域时(鼠标确实在红色矩形内的,只是截图截不到鼠标,所以看不到。):


PsychoPy入门_07_鼠标的使用_第2张图片

点选红色矩形之后output区的结果(那个警告什么的我也处理不了,就那样呆着好了。):


用鼠标做点选操作基本上就是这样了。那用这样的方法我们就可以做一个【继续】按钮。代码如下,接着上面的程序放就行。

#--------------------B 继续按钮----------------------------
event.clearEvents()                 # 清除之前的event事件。
button = visual.Rect(win, width=0.2, height=0.11, 
                    fillColor = 'yellow', 
                    pos = (0.5,-0.4))     # 用visual.Rect建了一个0.2*0.11的矩形。
text = visual.TextStim(win, text = 'Next', 
                    height = 0.1, 
                    color = 'black', 
                    pos = (0.5,-0.4))     # 位置与button相同。

while not myMouse.isPressedIn(button):
# 这里的逻辑跟--A 卡片选择--一样。
    if button.contains(myMouse):
        button.opacity = 0.4
    else:
        button.opacity = 0.2
    button.draw()
    text.draw()
    win.flip()

win.close()
core.quit()

运行界面像这样↓。

PsychoPy入门_07_鼠标的使用_第3张图片

点击跳转,没别的了。

以上。

PsychoPy的入门教程就这样虎头蛇尾地结束了。耶~~鼓掌!啪啪啪。

有什么疑问或者建议请在评论区留言。不过我猜应该多半没人看,所以我就当练习排版了[二哈]。

你可能感兴趣的:(PsychoPy入门_07_鼠标的使用)