You are viewing unmaintained documentation for an older version of OpenSesame. Click here to view the current documentation. Your version of OpenSesame: Language:

OpenSesame 3.0.0 will bring amazing new features! Curious? Take it for a test spin, and help us iron out the kinks.

Creating an extension

Overview

Relevant files

Let’s assume that your extension is called my_extension. In that case, your extension corresponds to a folder called my_extension, containing at least the following 2 files:

my_extension/
	info.yaml
	my_extension.py

Extension information

Extension information is defined in info.yaml. This works the same way as for plug-ins, with the exception that you don’t define any controls. For more information, see:

Writing the extension code

The main extension code is placed in my_extension.py. This file has one class, my_extension, which inherits libqtopensesame.extensions.base_extension.base_extension. So a basic (non-functional) extension class looks like this:

from libqtopensesame.extensions import base_extension

class my_extension(base_extension):

	pass

Activating an extension through the menu/ toolbar

An extension can appear in the menu or main toolbar of OpenSesame. This requires that you define several fields in info.yaml:

label: Example extension
icon: go-next
tooltip: Some tooltip
menu:
  index: 0
  separator_after: false
  separator_before: false
  submenu: Example
toolbar:
  index: -1
  separator_after: false
  separator_before: true

The label is the text that will appear in the menu. The icon is a freedesktop-compliant icon name that specifies the icon that will appear in the menu and/ or toolbar. The index gives the position of the extension in the menu/ toolbar, and works like a list index. That is, negative values are relative to the last entry, where -1 puts your extension at the end.

To have your extension respond to menu/ toolbar activation, implement the activate() method:

from libopensesame import debug
from libqtopensesame.extensions import base_extension

class my_extension(base_extension):

	def activate(self):

		debug.msg(u'My extension was activated!')

Listening for events

OpenSesame fires events whenever something important happens. For example, the save_experiment event is fired when an experiment is saved. To have your extension listen to an event, simply implement a method with the name event_[event name].

from libopensesame import debug
from libqtopensesame.extensions import base_extension

class my_extension(base_extension):

	def event_save_experiment(self, path):

		debug.msg(u'Event fired: save_experiment(path=%s)' % path)

Note that some events take keyword arguments, such as path in the case of save_experiment. The keyword signature of your function must match the expected keyword signature. A list of events can be found in the example extension.

Examples

  • The example extension is a dummy extension that demonstrates how to implement a basic extension.
  • Other examples can be found in the extensions folder included with OpenSesame.