A slider widget for OpenSesame 3.2
I've seen quite a few questions about slider widgets for OpenSesame forms. A few examples of slider widgets are floating around on this forum, but these examples aren't compatible with OpenSesame 3.2. Therefore I attached a demonstration experiment (for OpenSesame 3.2) that defines a slider widget, and shows how you can use it, both in an inline_script and in a form_base item.
I hope this is useful!
(See a link to the experiment in my comment below. It appears to have gotten lost during a forum upgrade.)



Comments
Hi @sebastiaan and @eduard
Sorry if I missed this in your code, is there a way to control for the gradations when filling the slider? I think the way it is now, it is from 0 to a 100 steps to fill in the entire slider.
But if I wanted to have a more narrow range, say 0 to 10 with increments, or 0 to 1 in increments of 0.1 (to match the current scale), is there are way to control that directly in your code?
Thanks
Helio
Hi Helio,
The sliders goes from 0 to 1, but I would leave it that way, because that's easily converted to whatever range you need later on. If you want to control the gradation, you can adjust the script to, for example, round
self._fillto 1 digit of precision, so that there are 10 steps (0, 0.1, 0.2, etc.).You can do this in
SliderWidget.coroutine(), right beforeself._set_fill()is called. For example like so:Cheers!
Sebastiaan
Check out SigmundAI.eu for our OpenSesame AI assistant!
Thanks loads @sebastiaan
works perfectly.
cheers!
Helio
Hi,
Please forgive me for my ignorance but I can't find the "attached a demonstration experiment".
any help?
SH
Neither did I, but here it is!
Check out SigmundAI.eu for our OpenSesame AI assistant!
Hi,
Thank you for the code. It's a very useful widget!
I am trying to customize the slider to my needs. I want to add an image, under the slider, that changes according to the amount of fill in the slider. I am having a hard time implementing this.
I managed to add an image, but I couldn't make it change according to the fill.
I would appreciate your help.
Thank you
Naama
Hi Naama,
I can't open the attachment, but conceptually, you have to draw the image to a canvas (as you probably already have and then change the image depending on the fill For example:
Does that make sense?
Eduard
It should be downloadable again! (We've been having some issues with the forum lately, and some attachments got lost.)
Check out SigmundAI.eu for our OpenSesame AI assistant!
Hi there,
A very basic question here: How can I add some text to identify what each side of the slider represents? I want to implement a slider which has possible ratings of 1 (very dissimilar) to 9 (very similar).
Any help would be greatly appreciated.
Hi,
The slider is just a regular widget that you can add to a form. Other widgets can be added to the same form. For example, there is a text display widget. See here for more info on forms and widgets:
So basically, in the example experiment that Sebastiaan uploded, you can add in the python_example inline_script, text displays widgets that indicate the labels of the slider.
Good luck,
Eduard
Hi @sebastiaan and @eduard,
thanks for the code above! Would it be possible to change the slider fill depending on mouse position instead of mouse click? If I wanted to have an image behind the slider, where would I add the canvas function?
Thanks for your help!
Hi Dina,
I am not an expert on that, but from what I can see in the source code implementing widgets and forms it is not that trivial to change. I think I could make it work, but only by changing the source code and without testing whether anything else in Opensesame didn't break because of my changes.
To try it out yourself, you need to find two files on your system:
In the first one you need to change lines 192 - end with:
In the second one, you need to replace lines 244-250 with
elif button is None: xy, timestamp = ms.get_pos() # Switch the focus to the newly clicked widget (if any) widget = self.xy_to_widget(xy) if widget is None: continue if focus_widget is not None: focus_widget.focus = False widget.focus = True focus_widget = widget msg = { u'type': u'ms_pos', u'pos': xy, u'button': button, u'timestamp': timestamp } # Send message (if any) if msg is None: continue resp = coroutines[focus_widget].send(msg) self.canvas.show() if resp is not None and self._validator(): break focus_widget = NoneI also attach the two files here, so you can see how they are supposed to look like (maybe you can even just replace the files altogether).
It is of course not great to make your experiment work by changing the source code. So use it with care. @sebastiaan knows perhaps an easy way to integrate those changes into your experiment instead of the source code
good luck,
Eduard
Edit: The changes definitely break the text_input form, I just noticed.