Howdy, Stranger!

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

Supported by

[open] Response time for 'custom form' variable

edited February 2015 in OpenSesame

Pretty sure this is a simple enough problem, but the solution eludes me.
I have an experiment that shows a Custom Form that displays three pictures, and under each picture are three separate 'Rating Scale' widgets that record the variables "Pos1" "Pos2" and "Pos3"
Here's what the code looks like:

All I want to do is record a timestamp for whenever a response is chosen for each Rating Scale variable. That way I can get the time from when the array is presented to when each of the Rating Scales is pressed.

I'd like to keep the Custom Form over an Inline Script to display the array if at all possible.

Any ideas would be very appreciated.

Thank you so much :)


  • edited 2:02PM

    Pretty sure this is a simple enough problem, but the solution eludes me.

    Well, not really. Forms don't keep track of time, so there is no easy way to know when a user presses a button. What you could do is hack into the form's internals, and replace it's render() function, which is called each time that the form is drawn, for example when you check a box. Then, within your custom render() function, you can maintain timestamps. The idea is shown below, but it's pretty clunky.

    def custom_render():    
        A custom function that renders the form and maintains timestamps of each
        time that the form is rendered.
        global render_nr
        exp.set('render_time_%d' % render_nr, exp.time())
        render_nr += 1
    render_nr = 0
    item_name = 'form_base' # The name of the form_base item
    form = exp.items[item_name]._form # Get the form object
    form._render = form.render # Back-up the original render function
    form.render = custom_render # Use custom render function
  • Hi,

    I have the same issue but i don't manage to apply this solution.

    Where should I put the code?

    With the new versions is there a simpler way to do that?

    Thank you for everything!

Sign In or Register to comment.