美文网首页心理学研究方法
PsychoPy入门_07_鼠标的使用

PsychoPy入门_07_鼠标的使用

作者: ChZ_CC | 来源:发表于2016-10-14 17:46 被阅读769次

    不靠谱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   # 打印
    

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


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


    点选红色矩形之后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的入门教程就这样虎头蛇尾地结束了。耶~~鼓掌!啪啪啪。

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

    相关文章

      网友评论

        本文标题:PsychoPy入门_07_鼠标的使用

        本文链接:https://www.haomeiwen.com/subject/rnxnyttx.html