Ü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
- Python in der OpenSesame GUI
- Dinge, die Sie wissen sollten
- Gängige Funktionen
- Das var-Objekt: Zugriff auf experimentelle Variablen
- Das clock-Objekt: Zeitfunktionen
- Das log-Objekt: Datenprotokollierung
- Das pool-Objekt: Zugriff auf den Dateipool
- Das responses-Objekt: Zugriff auf Teilnehmerantworten
- Die Canvas-Klasse: Präsentation von visuellen Reizen
- Die Keyboard-Klasse: Sammlung von Tastendrücken
- Die Mouse-Klasse: Erfassung von Mausklicks und Bildschirmberührungen
- Die Sampler-Klasse: Tonwiedergabe
- Alternative Module für Präsentation von Darstellungen, Erfassung von Antworten usw.
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 import
iert, 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.
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
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: