在for循环中多次呈现相同的RatingScale

问题描述 投票:2回答:1

我想在for循环中多次呈现相同的评级量表。

我试着这样做

for i in range(5):
    while rating_scale.noResponse:
        rating_question.draw()
        rating_scale.draw()
        win.flip()
        if event.getKeys(['escape']):
            core.quit()

但它没有多次提出评级量表。它只给出了第一个循环的值5次。

所以,我想,如果我重新定义评级量表(我有两个评级量表,PsychoPy可以选择):

rating_question     = visual.TextStim(win, text = "Hoe moeilijk vond je deze trial?", pos = (0,0.5))
rating_scale_1      = visual.RatingScale(win, low=0, high=100, marker='slider', tickMarks=[0, 25, 50, 75, 100], stretch=2, tickHeight=1.5, labels=["Heel makkelijk", "Makkelijk", "Neutraal", "Moeilijk", "Heel moeilijk"], showValue=False)
rating_scale_2      = visual.RatingScale(win, low=0, high=100, marker='slider', tickMarks=[0, 25, 50, 75, 100], stretch=2, tickHeight=1.5, labels=["Heel moeilijk", "Moeilijk", "Neutraal", "Makkelijk", "Heel makkelijk"], showValue=False)
rating_scales       = [rating_scale_1, rating_scale_2]

for i in range(5):
    rating_scale = rating_scales[random.randint(0,2)]
    while rating_scale.noResponse:
        rating_question.draw()
        rating_scale.draw()
        win.flip()
        if event.getKeys(['escape']):
            core.quit()

但这给出了一个错误,因为,我认为,它会自动选择相同的评级量表5次。因此,当随机整数在后续循环中不同时,它就不起作用。

所以,我尝试了这样,但它只是与代码的第一部分相同。仍然只有一个评级量表和5倍相同的值。

for i in range(5):
    rating_scale = rating_scales[1]
    while rating_scale.noResponse:
        rating_question.draw()
        rating_scale.draw()
        win.flip()
        if event.getKeys(['escape']):
            core.quit()

我知道它为什么会发生(因为我说循环只有在没有响应时才会出现),但我不知道如何解决它。据我所知,评级量表没有.clear()属性。

python psychopy
1个回答
1
投票

您需要在一个响应和下一个响应之间采取一些操作,例如:

for trial in trials:

    # update the question for this trial:
    rating_question.text = trial['question']

    # present the rating scale:        
    while rating_scale.noResponse:
        rating_question.draw()
        rating_scale.draw()
        win.flip()
        if event.getKeys(['escape']):
            core.quit()

    # a response was made, so save it on each iteration
    trials.addData('rating.response', rating.getRating())
    trials.addData('rating.rt', rating.getRT())

    # reset the scale to its original state for the next iteration:
    rating_scale.reset()

在上面,trials代表您用来控制试验的TrialHandler处理程序对象。

© www.soinside.com 2019 - 2024. All rights reserved.