OpenSesame
Rapunzel Code Editor
DataMatrix
Support forum
Python Tutorials
MindProbe
Supported by

Über Python

In OpenSesame können Sie komplexe Experimente nur mit der grafischen Benutzeroberfläche (GUI) erstellen. Manchmal stoßen Sie jedoch auf Situationen, in denen die Funktionalität der GUI unzureichend ist. In diesen Fällen können Sie Python-Code zu Ihrem Experiment hinzufügen.

Python wird in Online-Experimenten mit OSWeb nicht unterstützt. Wenn Sie Ihr Experiment online durchführen müssen, müssen Sie stattdessen JavaScript verwenden.

Python lernen

Ein grundlegendes Set an Tutorials und Übungen zum Einstieg in Python finden Sie unter https://pythontutorials.eu/.

Python in der OpenSesame GUI

Ein einzelner Python-Arbeitsbereich

Der gesamte Python-Code wird in einem einzigen Python-Arbeitsbereich ausgeführt. Das bedeutet, dass in einem inline_script definierte Variablen in allen anderen inline_scripts sowie in Python-Ausdrücken, die in Run-if-Anweisungen und Textstrings eingebettet sind, zugänglich sind. Das Gleiche gilt für Module: Einmal importiert, sind sie überall verfügbar.

So können Sie zum Beispiel das Canvas in einem inline_script erstellen...

my_canvas = Canvas()
my_canvas.fixdot()

... und es in einem anderen inline_script anzeigen ...

my_canvas.show()

Inline_script Elemente

Um Python-Code zu verwenden, müssen Sie Ihrem Experiment ein inline_script Element hinzufügen. Sie können dies tun, indem Sie das Python-Symbol (das blau/gelbe Symbol) aus der Element-Symbolleiste in die Experimentsequenz ziehen. Danach sehen Sie etwas Ähnliches wie Figure 1.

/pages/de/manual/python/img/about/inline-script.png

Figure 1. Das inline_script Element.

Wie Sie sehen können, besteht das inline_script Element aus zwei Registerkarten: einer für die Prepare-Phase und einer für die Run-Phase. Die Prepare-Phase wird zuerst ausgeführt, um den Elementen Zeit zu geben, sich auf die zeitkritische Run-Phase vorzubereiten. Es ist gute Praxis, Canvas-Objekte, Sampler-Objekte usw. während der Prepare-Phase zu erstellen, damit sie während der Run-Phase ohne Verzögerung präsentiert werden können. Aber das ist nur eine Konvention; Sie können während beider Phasen beliebigen Python-Code ausführen.

Für weitere Informationen zur Prepare-Run-Strategie siehe:

Bedingte ("if") Ausdrücke

Sie können einzeilige Python-Ausdrücke in bedingten Ausdrücken verwenden. Zum Beispiel können Sie das folgende Python-Skript als Run-if-Ausdruck verwenden (siehe auch Figure 2):

correct == 1 and response_time < 1000

/pages/de/manual/python/img/about/run-if.png

Figure 2. Verwendung von Python-Skripten in der Run-if-Anweisung eines sequence Elements.

Weitere Informationen zu bedingten ("if") Ausdrücken finden Sie unter:

Python in Text-Strings

Sie können Python-Anweisungen in Textstrings mit der {...} Syntax einbetten. Dies funktioniert für einfache Variablenreferenzen, aber auch für einzeilige Ausdrücke. Zum Beispiel könnten Sie den folgenden Text einem sketchpad hinzufügen:

Die Auflösung beträgt {width} x {height} px, insgesamt {width * height} Pixel

Je nach Auflösung Ihres Experiments könnte dies zu folgendem Text führen:

Die Auflösung beträgt 1024 x 768 px, insgesamt 786432 Pixel

Weitere Informationen zu Variablen und Text finden Sie unter:

Die Jupyter-Konsole (Debug-Fenster)

OpenSesame leitet die Standardausgabe an die Konsole (oder: Debug-Fenster) weiter, die Sie mit Strg + D oder über das Menü aktivieren können (Menü -> Ansicht -> Debug-Fenster anzeigen; siehe %FigDebugNormal). Sie können in die Konsole mit print() ausgeben.

print('Das erscheint im Debug-Fenster!')

Die Konsole ist außerdem ein interaktiver Python-Interpreter, der von Jupyter Project unterstützt wird.

Dinge, die Sie wissen sollten

Gängige Funktionen

Viele gängige Funktionen sind direkt in einem inline_script-Element verfügbar, ohne dass etwas importiert werden muss. Zum Beispiel:

# `Canvas()` ist eine Factory-Funktion, die ein `Canvas`-Objekt zurückgibt
fixdot_canvas = Canvas()
if sometimes(): # Manchmal ist der Fixdot grün
    fixdot_canvas.fixdot(color='green')
else: # Manchmal ist er rot
    fixdot_canvas.fixdot(color='red')
fixdot_canvas.show()

Für eine Liste der gängigen Funktionen, siehe:

Das var-Objekt: Zugriff auf experimentelle Variablen

Hinweis zur Version Ab OpenSesame 4.0 sind alle experimentellen Variablen als Globale verfügbar. Das bedeutet, dass Sie das var-Objekt nicht mehr benötigen.

Sie können auf experimentelle Variablen über das var-Objekt zugreifen:

# OpenSesame <= 3.3 (mit var-Objekt)
# Abrufen einer experimentellen Variable
print('my_variable ist: %s' % var.my_variable)
# Einstellen einer experimentellen Variable
var.my_variable = 'my_value'

# OpenSesame >= 4.0 (ohne var-Objekt)
# Abrufen einer experimentellen Variable
print('my_variable ist: %s' % my_variable)
# Einstellen einer experimentellen Variable
my_variable = 'my_value'

Eine vollständige Übersicht über das var-Objekt finden Sie hier:

Das clock-Objekt: Zeitfunktionen

Grundlegende Zeitfunktionen sind über das clock-Objekt verfügbar:

# Abrufen des aktuellen Zeitstempels
t = clock.time()
# Warten Sie 1 s
clock.sleep(1000)

Eine vollständige Übersicht über das clock-Objekt finden Sie hier:

Das log-Objekt: Datenprotokollierung

Datenprotokollierung ist über das log-Objekt verfügbar:

# Schreiben Sie eine Zeile Text
log.write('Meine benutzerdefinierte Protokollnachricht')
# Schreiben Sie alle Variablen
log.write_vars()

Eine vollständige Übersicht über das log-Objekt finden Sie hier:

Das pool-Objekt: Zugriff auf den Dateipool

Sie erhalten den vollständigen Pfad zu einer Datei im Dateipool über das pool-Objekt:

# Zeigen Sie ein Bild aus dem Dateipool an
path = pool['img.png']
my_canvas = Canvas()
my_canvas.image(path)
my_canvas.show()

Eine vollständige Übersicht über das pool-Objekt finden Sie hier:

Das responses-Objekt: Zugriff auf Teilnehmerantworten

Das responses-Objekt protokolliert alle Teilnehmerantworten, die im Laufe des Experiments gesammelt wurden. Zum Beispiel, um die Korrektheit aller bisherigen Antworten aufzulisten:

for response in responses:
    print(response.correct)

Eine vollständige Übersicht über das responses-Objekt finden Sie hier:

Die Canvas-Klasse: Präsentation von visuellen Reizen

Die Canvas-Klasse wird verwendet, um visuelle Reize zu präsentieren. Zum Beispiel können Sie einen Fixpunkt wie folgt anzeigen:

my_canvas = Canvas()
my_canvas.fixdot()
my_canvas.show()

Eine vollständige Übersicht über die Canvas-Klasse finden Sie hier:

Die Keyboard-Klasse: Sammlung von Tastendrücken

Die Keyboard-Klasse wird verwendet, um Tastendrücke zu erfassen. Zum Beispiel, um ein Tastendruck mit einem Timeout von 1000 ms zu erfassen:

my_keyboard = Keyboard(timeout=1000)
key, time = my_keyboard.get_key()

Eine vollständige Übersicht über die Keyboard-Klasse finden Sie hier:

Die Mouse-Klasse: Erfassung von Mausklicks und Bildschirmberührungen

Die Mouse-Klasse wird verwendet, um Mausklicks und Bildschirmberührungen zu erfassen. (OpenSesame macht keinen Unterschied zwischen den beiden.) Zum Beispiel, um einen Mausklick mit einem Timeout von 1000 ms zu erfassen:

my_mouse = Mouse(timeout=1000)
button, position, time = my_mouse.get_click()

Eine vollständige Übersicht über die Mouse-Klasse finden Sie hier:

Die Sampler-Klasse: Tonwiedergabe

Die Sampler-Klasse wird verwendet, um Tonsamples abzuspielen. Zum Beispiel, um einen einfachen Beep abzuspielen:

my_sampler = Sampler()
my_sampler.play()

Eine vollständige Übersicht über die Sampler-Klasse finden Sie hier:

Alternative Module für Präsentation von Darstellungen, Erfassung von Antworten usw.

psychopy

Wenn Sie das psycho Backend verwenden, können Sie die verschiedenen PsychoPy Module direkt verwenden. Weitere Informationen finden Sie unter:

expyriment

Wenn Sie das xpyriment Backend verwenden, können Sie die verschiedenen Expyriment Module direkt verwenden. Weitere Informationen finden Sie unter:

pygame

Wenn Sie das legacy, droid oder xpyriment Backend (nur wenn "Use OpenGL" auf "no" gesetzt ist) verwenden, können Sie die verschiedenen PyGame Module direkt verwenden. Weitere Informationen finden Sie unter:

Supported by