Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Supported by

Log response time for return/enter in inline script

edited February 7 in OpenSesame

Hi


I have made an experiment in which I use an inline_script.

I want to show my participants a sketchpad and at the same time let them give a multiple character response (i.e., they have to solve arithmetic items which are shown with the sketchpad; answers range from 25-112). They have to submit their answer by pressing the return/enter key.

Using different answers in this forum, I have come up with the following script (remark: my sketchpad is called "StimulusDisplay")


from openexp.canvas import canvas
from openexp.keyboard import keyboard
my_canvas = canvas(self.experiment)
my_keyboard = keyboard(self.experiment)
resp = "" # Here we store the response.
t1 = self.time()
while True:
	# Get a keyboard response
	key, time = my_keyboard.get_key()
	# keyboard.to_chr() converts the keycode to a description,
	# like 'space' or 'return'. If return is pressed the loop
	# should be exited.
	if my_keyboard.to_chr(key) == "return":
		break      
	# Handle backspace by removing the last character
	if my_keyboard.to_chr(key) == "backspace":
		resp = resp[:-1]   
	else:
		# The built-in chr() converts the keycode to a character,
		# like ' ' and '/'.
		resp += my_keyboard.to_chr(key)
	# Copy the canvas from a sketchpad called 'StimulusDisplay' and
	# overlay the response
	my_canvas.copy(self.experiment.items["StimulusDisplay"].canvas)
	my_canvas.text(resp, x=0, y=300)
	my_canvas.show()
# Save the response

rt = time - t1
self.experiment.set("ANSWER", resp)
self.experiment.set("ANSWER_rt", rt)



There are several problems with my script.

  1. I am not sure if my response time variable (rt) gives me the response time for when the return key is pressed?
  2. My sketchpad disappears after the first key is pressed; i want it to stay until enter/return is pressed
  3. I want to use the numbers on the AZERTY keyboard, but I need the shift lock to be forced. I have no idea how to do this.


Sorry, I'm really new to Python.


HUGE THANKS IN ADVANCE!

Elien

Comments

  • Hi Elien,

    Your code used a little outdated syntax of Opensesame, by now things can be done a little easier (see my code below). Also, it is somewhat better to present the sketchpad in the inline_script itself, basically the same way you show the response.

    Hope it helps,

    Eduard


    my_canvas = Canvas()
    my_keyboard = Keyboard()
    resp = "" # Here we store the response.
    question = '25+85 = ?'
    my_canvas.text(question, x=0, y=-100)
    my_canvas['resp'] = Text('', x=0, y=300)
    my_canvas.show()
    
    t1 = self.time()
    while True:
       # Get a keyboard response
       key, time = my_keyboard.get_key(timeout = 4)
       if key != None:
          # keyboard.to_chr() converts the keycode to a description,
          # like 'space' or 'return'. If return is pressed the loop
          # should be exited.
          if key == "return":
             break     
          # Handle backspace by removing the last character
          elif key == "backspace":
             resp = resp[:-1]  
             my_canvas['resp'].text = resp
             my_canvas.show()
          elif key == "space":
             pass
    
          elif key in [0,1,2,3,4,5,6,7,8,9]:
             # The built-in chr() converts the keycode to a character,
             # like ' ' and '/'.
             resp += key
             # Copy the canvas from a sketchpad called 'StimulusDisplay' and
             # overlay the response
             my_canvas['resp'].text = resp
             my_canvas.show()
    # Save the response
    
    rt = time - t1
    self.experiment.set("ANSWER", resp)
    self.experiment.set("ANSWER_rt", rt)
    


Sign In or Register to comment.