Creating an extension
- Relevant files
- Extension information
- Writing the extension code
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 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:
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
An extension can appear in the menu or main toolbar of OpenSesame. This requires that you define several fields in
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
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
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!')
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
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.
exampleextension is a dummy extension that demonstrates how to implement a basic extension.
- Other examples can be found in the
extensionsfolder included with OpenSesame.