psychopy.org | Reference | Downloads | Github

Min and Max Image Zoom

OS: Mojave
Version: 3.0.0b11

I am running an experiment that requires participants to zoom in and out of images (circular) using a keyboard response (either left or right). I am trying to put a min and max threshold on their responses (in relation to the image size) so they can only zoom in or out of the image to a certain image size e.g. 1600,1600 pixels. However, I would like them to be able to zoom in the other direction if they meet the max or min threshold either end (I hope this makes sense).

I have declared min and max image size in the ‘Begin Routine’ section of a code snippet and have attempted to call these in, however they don’t seem to limit the size of the image. I have tried other variations where I say if maxSize is reached then stop keyboard input but this ends the routine, and I want the participant to be able to scale up and down until they are happy with the image size then finish the routine (trial) themselves.

maxSize = (1600,1600)
minSize = (1200,1200)

Below is the code to zoom in and out (in pixels). I have tried to declare the max and min sizes after the key inputs.

if response_image.status == STARTED:    
    key = event.getKeys() 
    if len(key) > 0:         
        if key[0] == 'left':     
            response_image.size += (-100,-100)
            response_image.size == maxSize 

        elif key[0] == 'right':     
            response_image.size += (100,100)
            response_image.size == minSize

        elif key[0] == 'space':     
            thisExp.addData('chosen_size', response_image.size)               
            thisExp.addData('RT', t)               
            continueRoutine = False         
        elif key[0] == 'q':     
            win.close()     
            core.quit()  

keys = event.getKeys(keyList = ['q']) 
if 'q' in keys:         
    win.close()         
    core.quit()  
event.clearEvents(eventType = 'keyboard')

Thank you for your help.

Hi @agboard1 , you just need to add an extra condition so that the size changes only when the image is larger or smaller / equal to the min/max:

# Begin Experiment
maxSize = 1600
minSize = 1200


if response_image.status == STARTED:    
    key = event.getKeys() 
    if len(key) > 0:         
        if key[0] == 'left' and response_image.size[0] >= minSize:     
            response_image.size += (-100,-100)
            response_image.size == maxSize 

        elif key[0] == 'right' and response_image.size[0] <= maxSize:       
            response_image.size += (100,100)
            response_image.size == minSize

#... etc

Thank you.