Howdy, Stranger!

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

Supported by

'split 100' ratings

Hello forum,

does anyone know if there's a tool in OpenSesame for 'split 100' ratings – where participants are presented with a set of possible responses and rate them by distributing 100 points between them?

Presenting the possible responses obviously isn't the problem. The rating could be done by a simple text input, but then there would be no check on whether they really sum up to 100. Also I think if there was something visual (like pushing bars up and down with the mouse cursor), that would be more intuitive and more fun.

There may not be the one tool for exactly this, but any pointers or ideas will be appreciated!


  • Hi David,

    That's an interesting question. So: No, I'm not aware of an implementation of this for OpenSesame, but it shouldn't be too difficult to make. But how does this work exactly? What does the user interaction look like? For example, say that you'd visualize this as four separate sliders, then what happens to the values of slides B, C, and D if the if the value of A is changed by the user?



  • Thanks!

    I've never used this kind of rating myself, have only seen it reported and I don't know how 'fancy' that implementation was...

    I'd say if it's sliders, then ideally if A is pushed up, B, C and D should go down accordingly. A simpler version could be to just have an automatic display of the current sum, and the response can only be logged when that is 100.

    Or: Have some actual 'points' on the screen (not 100, but maybe 10-20) that the user can drag and drop into boxes for A, B, C.

  • Hi David,

    There are a few ways in which you could implement this. The easiest would be to simply validate the form to check if the slider values (or textinput values) add up to some value before accepting it.

    A fancier way would be to dynamically adjust all sliders as soon as one value has changed. The script below shows how you can do this in principle. It re-adjusts the slider values after every click so that they add up to 1 again. From a user perspective it feels a bit odd though, so there may be more intuitive ways to handle this interaction.

    For the slider widget, see:



    def total():
    	"""Gets the sum of all slider values"""
    	return sum([
    		for w in f.widgets
    		if isinstance(w, SliderWidget)
    def adjust_and_show(show):
    	"""A decorator to adjust the slider values before showing the canvas"""
    	def inner():
    		# Get the sum of all slider values
    		t = total()
    		# And then adjust all slider values such that they add up to 1
    		for w in f.widgets:
    			if not isinstance(w, SliderWidget):
    			w._fill = w._fill / t
    		# And show!
    	return inner
    f = Form(rows=(1,1,1))
    s1 = Slider(var='s1', initial_fill=0.25, orientation='horizontal')
    s2 = Slider(var='s2', initial_fill=0.25, orientation='horizontal')
    s3 = Slider(var='s3', initial_fill=0.25, orientation='horizontal')
    s4 = Slider(var='s4', initial_fill=0.25, orientation='horizontal')
    b = Button()
    f.set_widget(s1, (0, 0), colspan=1)
    f.set_widget(s2, (0, 1), colspan=1)
    f.set_widget(s3, (1, 0), colspan=1)
    f.set_widget(s4, (1, 1), colspan=1)
    f.set_widget(b, (2, 1), colspan=2) = adjust_and_show(

  • This looks very useful, thank you! I'll try it.

Sign In or Register to comment.