#psychopy
#psychopy
Вопрос:
Я использую Builder версии v1.80.06
Я могу достаточно легко изменять положение полигона при каждом повторении
например, у меня есть список позиций
positions=[[1,1],[1.1,0.9],...]
и в «Поле позиции» есть :
$positions[0]
а затем измените его значение в блоке кода при каждом повторении.
НО я хочу изменить размер аналогичным образом с помощью списка $sizes, но получаю сообщение об ошибке.
Глядя на сгенерированный код, проблема находится на стадии создания объекта. сгенерированный код:
для жестко закодированного полигона (т.Е. ok)
polygon_1 = visual.Rect(win=win, name='polygon_1',
width=[1.5, .2][0], height=[1.5, .2][1],
ori=0, pos=[0, -0.6],
lineWidth=1, lineColor=[1,1,1], lineColorSpace=u'rgb',
fillColor=[0,1,0], fillColorSpace=u'rgb',
opacity=1,interpolate=True)
для одного, заполненного переменной (не работает):
polygon_2= visual.Rect(win=win, name='polygon_2',
width=1.0[0], height=1.0[1],
ori=0, pos=[0,0],
lineWidth=1, lineColor=[1,1,1], lineColorSpace=u'rgb',
fillColor=[1,0,0], fillColorSpace=u'rgb',
opacity=1,interpolate=True)
Он жалуется (справедливо), что 1.0[0]
не имеет смысла в параметрах ширины и высоты
Несмотря на то, что у меня есть экземпляр моего sizes
списка, созданный в блоке кода в самом начале эксперимента, вместо чтения $sizes[0]
используется значение с плавающей запятой по умолчанию 1.0
.
Любые другие предложения о том, как динамически изменять размер полигона во время выполнения с помощью builder?
Я мог бы просто взять сгенерированный код и поместить его в coder, я полагаю, и устранить проблему, но я хочу передать это исследователю, поэтому хотел бы, чтобы они могли его поддерживать.
Спасибо,
Ответ №1:
Если вы задаете размер как кортеж / список с парой значений [1.2,1.5] или [1,1], это не исправит?
Комментарии:
1. Спасибо — не уверен, что я правильно вас понял. Вы имели в виду создание переменной в блоке кода — например
mysize=[1.2,1.5]
, а затем в форме полигона задайте размер дляmy_size and
установки выпадающегоset every repeat
списка, а затем измените значениеmysize
в коде по мере необходимости? Ввод любой переменной в поле «размер» для объекта polygon генерирует ту же ошибку, что и выше (хотя в метке поля есть атрибут $, подразумевающий, что переменная может использоваться
Ответ №2:
Когда вы меняете атрибуты во время выполнения, просто измените атрибут существующего стимула вместо создания экземпляра полностью нового стимула. Последнее довольно сильно зависит от ресурсов, вызывая ненадежное время. Так что
stim = visual.Rect(win) # instantiation, ressource heavy
stim.attribute = newValue # change attribute. lighter.
Я могу придумать два способа, которыми вы могли бы сделать это довольно аккуратно. Первый — явно задать ширину и высоту вместо атрибута size, но используя значение, подобное размеру. Итак (удаление всех параметров, не представляющих интереса):
polygon_2 = visual.Rect(win)
# Unpack the x,y-sizes to the stimulus .width and .height attributes
newSize = (1.5, 0.2)
polygon_2.width, polygon_2.height = newSize
Второй, если атрибут size действительно важен для использования, — использовать полигин с edges=4
, чтобы сделать его прямоугольником:
polygon_2 = visual.Polygon(win=win, edges=4, size=(1.5, 0.2))
# Setting size
polygon_2.size = (0.8, 0.4)
Сначала попробуйте предложение Джона. Но идея с visual.Rect
and visual.Circle
заключается в том, чтобы использовать заменяющие полигоны size
и vertices
для чего-то более подходящего. Таким образом, размер может делать неожиданные вещи, если ширина / высота и т. Д. Не равны 1.
Комментарии:
1. Джонас, я думаю, что в первоначальном сообщении говорилось об использовании Builder
2. Спасибо, Джонас. Почти на месте: если я жестко свяжу размер полигона с начальным значением и установлю его
constant
, я могу использовать некоторый код наBegin routine
вкладке, чтобы изменитьsize
. 2 балла: если я изменяю.width
и.height
явно ничего не происходит (без изменения размера, но без ошибок), но если я установилsize
, то размер полигона изменяется, однако, несколько озадачивает, что он игнорируетunits=norm
настройку, и вместо этого кажется, что он изменяет процентное масштабирование в зависимости от начальной жестко заданной настройки. например, so настройкаpolygon.size=[1.1,1.1]
имеет другое значение.эффект, если начальноеsize
значение изменяется. :$3. Поведение
.width
and.height
неудивительно, поскольку это не свойства visual . Полигоны, таким образом, просто то, что вы добавляете к объекту. Я должен проверить поведениеpolygon.size
и вернуться к вам.