有没有比较好的psychopy学习教程或示例
PsychoPy是一款很方便试用的心理学实验软件,目前已更新至3.0版本,基于Python3.6。系统的学习可以去PsychoPy的官网。
Home - PsychoPy v3.0官网的论坛中也有很多的讨论,如果遇到问题在论坛中简单检索一下,基本上都有相应解答。
另外推荐PsychoPy开发者写的教程书《Building Experiments in PsychoPy》,目前貌似只有英文版,中文版由清华大学何吉波教授团队翻译,很早之前就翻译完了,估计出版发行应该也不远了吧,可以关注一下。
《Building Experiments in Psychopy》【摘要 书评 试读】- 京东图书 【有没有比较好的psychopy学习教程或示例】 再推荐一下我个人的微信公众号——Ryan聊心理,不定期更新心理学编程相关的教程,多数情况会附有实例程序的下载链接。
【干货】PsychoPy简介【干货】PsychoPy中的鼠标点击
PsychoPy的Builder模式和E-prime有些相似,如果从EP过来的从Builder上手比较快,如果是喜欢自己动手多一些的,可以使用Coder模式,就是完全使用Python语言来写,中间import psychopy作为包来使用,也很方便,可扩展性强。
PsychoPy还在线上实验平台Pavlovia上实现了在线实验的功能(不过目前只有用Builder做的程序才能直接传到Pavlovia上做),在这个平台也支持使用jsPsych或者lab.js制作的实验程序进行线上实验。
这个平台上有很多世界各地的研究者上传的PsychoPy实验程序,也可以线上试用或者下载源文件体验和学习。
Pavlovia【干货】如何使用PsychoPy的线上实验模式PsychoPy的线上实验模式
希望以上内容对于想要学习PsychoPy的同学有所帮助~
■网友
转载自:psychopy心理学编程 先贴代码# -*- coding: utf-8 -*-"""Created on Tue Apr 12 10:31:15 2016@author: zbg"""from psychopy.visual import Window, ImageStim, TextStim, BufferImageStim, Rect, Circlefrom psychopy import core, event, gui, clockimport randomfrom itertools import *#定义一些基本常量fullscr = FalseCOLOR = {\u0026#39;red\u0026#39;: , \u0026#39;green\u0026#39;: , \u0026#39;blue\u0026#39;: , \u0026#39;white\u0026#39;: , \u0026#39;black\u0026#39;: , \u0026#39;gray\u0026#39;: }CLOC = {\u0026#39;left\u0026#39; : (-224, 0), \u0026#39;right\u0026#39;: (224, 0) }TLOC = {\u0026#39;left\u0026#39; : (-224, -20), \u0026#39;right\u0026#39;: (224, -20), 0 : 0 }#准备实验参数与变量N = 360colors = clocs = soas = tlocs = # + trails = list(product(colors, clocs, soas, tlocs))* 12 +\\ list(product(colors, clocs, soas, )) * 6random.shuffle(trails)results = #程序使用的各种函数def MakeStimBackGround(win): t = TextStim(win, text = \u0026#39;+\u0026#39;, pos = (0, 0), colorSpace = \u0026#39;rgb255\u0026#39;, color = COLOR, units = \u0026#39;pix\u0026#39;, height = 32) cb = Rect(win, width=64, units = \u0026#39;pix\u0026#39;) cb.setLineColor(colorSpace = \u0026#39;rgb255\u0026#39;, color = COLOR) cb.setPos((0, 0)) rb = Rect(win, width=64, height= 64, units = \u0026#39;pix\u0026#39;) rb.setLineColor(colorSpace = \u0026#39;rgb255\u0026#39;, color = COLOR) rb.setPos((224, 0)) lb = Rect(win, width=64, height= 64, units = \u0026#39;pix\u0026#39;) lb.setLineColor(colorSpace = \u0026#39;rgb255\u0026#39;, color = COLOR) lb.setPos((-224, 0)) stimBackground = BufferImageStim(win, stim = ) return stimBackgrounddef MakeCircle(win): circle = Circle(win, radius=16, edges=32, units = \u0026#39;pix\u0026#39;) return circle def GetSubject(): """ 返回被试的id """ myDlg = gui.Dlg(title="Subject Information") myDlg.addField(u\u0026#39;被试ID:\u0026#39;) myDlg.show() if myDlg.OK: thisInfo = myDlg.data else: exit(0) return thisInfo def WaitTheKey(win, key = \u0026#39;space\u0026#39;): event.clearEvents() while key not in event.getKeys(): pass def ShowTextAndWaitTheKey(win, text = \u0026#39;\u0026#39;, wait = 0, key = \u0026#39;space\u0026#39;, pos=(0,-0.0), height = 55, units = "pix"): t =TextStim(win, text ,pos = pos, height = height, units = units) t.draw() event.clearEvents() clk = clock.CountdownTimer(wait) win.flip() while clk.getTime() \u0026gt; 0: pass while key not in event.getKeys(): passdef ShowTextAndWait(win, text = \u0026#39;\u0026#39;, wait = 0, pos=(0,-0.0), height = 55, units = "pix"): t =TextStim(win, text ,pos = pos, height = height, units = units) t.draw() clk = clock.CountdownTimer(wait) win.flip() while clk.getTime() \u0026gt; 0: pass def ShowIntro(win): introduce =u""" 指导语 按继续 """ ShowTextAndWaitTheKey(win, introduce) def ShowFixation1(win, stimBackground): clk = clock.CountdownTimer(0.8) stimBackground.draw() win.flip() while clk.getTime() \u0026gt; 0: passdef ShowCue(win, color, loc, stimBackground, circle): circle.setFillColor(colorSpace = \u0026#39;rgb255\u0026#39;, color = COLOR) circle.setLineColor(colorSpace = \u0026#39;rgb255\u0026#39;, color = COLOR) circle.setPos(CLOC) stimBackground.draw() circle.draw() clk = clock.CountdownTimer(0.2) win.flip() while clk.getTime() \u0026gt; 0: passdef ShowFixation2(win, soa, stimBackground): \u0026#39;\u0026#39;\u0026#39; 返回值有 (\u0026#39;timeout\u0026#39;) 这个是想要的 (按键) 这个表示提前按键 \u0026#39;\u0026#39;\u0026#39; event.clearEvents() stimBackground.draw() clk = clock.CountdownTimer(soa) win.flip() while clk.getTime() \u0026gt; 0: pressedKeys = event.getKeys() if len(pressedKeys) \u0026gt; 0: return pressedKeys return \u0026#39;timeout\u0026#39; def ShowTarget(win, loc, stimBackground): """ 返回(按键, 反应时(s)) 情况分别有: (\u0026#39;f\u0026#39;, 反应时) (\u0026#39;j\u0026#39;, 反应时) ... (\u0026#39;q\u0026#39;, 反应时) 通常表示退出 (\u0026#39;timeout\u0026#39;, 0) """ event.clearEvents() if loc == 0: stimBackground.draw() else: t = TextStim(win, text = \u0026#39;*\u0026#39;, pos = TLOC, colorSpace = \u0026#39;rgb255\u0026#39;, color = COLOR, units = \u0026#39;pix\u0026#39;, height = 96) stimBackground.draw() t.draw() clk = 0 clk = clock.CountdownTimer(1) win.flip() while clk.getTime() \u0026gt; 0: pressedKeys = event.getKeys() key = set(pressedKeys) \u0026amp; set() if len(key) \u0026gt; 0: return (key.pop(), 1 - clk.getTime()) return (\u0026#39;timeout\u0026#39;, 0)def ShowTimePre(win): ShowTextAndWait(win, text = u\u0026#39;请看到*后再按键\u0026#39;, wait = 1)def ShowTimeOut(win): ShowTextAndWait(win, text = u\u0026#39;请在*出现1秒内按键\u0026#39;, wait = 1)def ShowBlank(win, wait = 0.7): ShowTextAndWait(win, wait = wait)def ShowBreak(win): ShowTextAndWaitTheKey(win, text = u"休息一下", key = \u0026#39;space\u0026#39;, wait = 10) def ShowEnd(win): introduce =u""" 结束了 按退出 """ ShowTextAndWaitTheKey(win, text = introduce)def StoreResult(name, N, trails, results): fp = open(name + \u0026#39;.txt\u0026#39;,\u0026#39;w\u0026#39;) fp.write("ID\\tnum\\tcolor\\tcloc\\tsoa\\ttloc\\trKey\\tRT\") def w(x): fp.write(str(x) + \u0026#39;\\t\u0026#39;) def n(): fp.write(\u0026#39;\\u0026#39;) def k(x): #trans 1s to 1000ms return "%.0f" % (x * 1000) for i in range(N): color, cloc, soa, tloc = trails rKey, RT = results map(w, ) n() fp.close() #实验开始name = GetSubject()win = Window(fullscr = fullscr, colorSpace = \u0026#39;rgb255\u0026#39;, color = COLOR)stimBackground = MakeStimBackGround(win)circle = MakeCircle(win)ShowIntro(win)for i in range(N): color, cloc, soa, tloc = trails RT = 0 rKey = 0 ShowFixation1(win, stimBackground) ShowCue(win, color, cloc, stimBackground, circle) key = ShowFixation2(win, soa, stimBackground) if key != \u0026#39;timeout\u0026#39;: ShowTimePre(win) RT = -1 rKey = 0 else: (rKey, RT) = ShowTarget(win, tloc, stimBackground) if tloc == 0 and rKey != \u0026#39;timeout\u0026#39;: ShowTimePre(win) elif tloc !=0 and rKey == \u0026#39;timeout\u0026#39;: ShowTimeOut(win) else: pass ShowBlank(win, 0.7) if rKey == \u0026#39;q\u0026#39;: StoreResult(\u0026#39;exp-\u0026#39; + name, i, trails, results) win.close() exit(0) results.append((rKey, RT)) if i % 60 == 59: ShowBreak(win)StoreResult(\u0026#39;exp-\u0026#39; + name, N, trails, results)ShowEnd(win)win.close()
推荐阅读
- 为啥知乎上普便有一种【我在北上广深打工,所以拥有更好的视野】这样的错觉
- 趣头条|你我皆风华正茂,拥有广汽三菱奕歌的日子是美好的
- 在上海陆家嘴附近工作,请问去哪边租房会比较好
- 设计专业学生上传自己的作品,用哪个网站比较好
- 知乎有没有必要增加一个特别关注功能
- 言论自由|
- 学的自动化却对IT比较感兴趣。。感觉对自己的专业帮助不大,好苦恼,要不要继续是专精还是学点感兴趣的?
- 大三学生准备日本留学过程中要不要准备考研
- 100W——150W有啥好的车
- 肝硬化|肝不好的人,身体有什么异常,暗示肝硬化来了?肝病怕拖,早检查
