我正在尝试执行一项任务,其中注视十字将在60秒左右的随机时间(以秒为单位)改变颜色(从白色变为红色)。因此,在5s,10s,45s或55s。我尝试了if else循环,但收到一个错误:fixation.draw() NameError:未为脚本中的最后一个fixation.draw()定义名称“ fixation”,我不知道为什么。我尝试在循环之前定义固定,但是它没有用,我也想在if else循环中定义它,但是也许我错了。这是代码:
from psychopy import visual, event, core, data, gui
from psychopy.hardware.emulator import launchScan
import time
from numpy.random import random, randint, normal, shuffle
globalClock = core.Clock()
class MyStim(object):
def __init__(fixation):
fixation()
fixationtimes = list(range(60))
win = visual.Window([1280, 800], monitor="testMonitor",fullscr=True)
if fixationtimes == [5, 10, 45, 55]: # create list
shuffle(fixationtimes) # randomize order
fixation = visual.GratingStim(win=win, units="deg", size=2, pos=[0, 0], sf=0, color="red", autoDraw=True)
else:
fixation = visual.GratingStim(win=win, units="deg", size=2, pos=[0, 0], sf=0, color="white", autoDraw=True)
fixation.draw()
win.flip()
core.wait(2.0)
myStim = MyStim()
win.flip()
core.quit()
代码可能效率很低,因为我是Python新手。如果有人可以帮助,请:)!
答案 0 :(得分:0)
发生错误是因为 init ()函数实际上并没有立即发生。 这段代码是一个简单的演示。
class Foo(object):
def __init__(self):
print("hi from init!")
print("hi!")
myClass = Foo()
此输出
hi! hi from init!
>>>
因此,只有在执行了类中的每一行之后,才会调用 init ()函数。
此外,在定义类时,通常不建议在方法之外编写代码。如果您想让类做一些事情,请创建一个函数:)
答案 1 :(得分:0)
我认为没有class函数就可以做到。所以我做了以下事情:
globalClock = core.Clock()
win = visual.Window([1280, 800], monitor="testMonitor",fullscr=True)
fixationtimes = list(range(60))
for i in fixationtimes:
if (i == 5 or i == 10 or i == 45 or i == 55): # create list
fixation = visual.GratingStim(win=win, units="deg", size=2, pos=[0, 0], sf=0, color="red", autoDraw=True)
fixation.draw()
win.flip()
core.wait(1.0)
else:
fixation = visual.GratingStim(win=win, units="deg", size=2, pos=[0, 0], sf=0, color="white", autoDraw=True)
fixation.draw()
win.flip()
core.wait(1.0)
win.close()
core.quit()