psychopy 2024.1.4__py3-none-any.whl → 2024.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of psychopy might be problematic. Click here for more details.
- psychopy/.DS_Store +0 -0
- psychopy/CHANGELOG.txt +206 -0
- psychopy/GIT_SHA +1 -0
- psychopy/VERSION +1 -0
- psychopy/__init__.py +77 -15
- psychopy/app/Resources/classic/plugin16.png +0 -0
- psychopy/app/Resources/classic/plugin16@2x.png +0 -0
- psychopy/app/Resources/dark/plugin16.png +0 -0
- psychopy/app/Resources/dark/plugin16@2x.png +0 -0
- psychopy/app/Resources/light/plugin16.png +0 -0
- psychopy/app/Resources/light/plugin16@2x.png +0 -0
- psychopy/app/__init__.py +76 -2
- psychopy/app/_psychopyApp.py +126 -101
- psychopy/app/builder/builder.py +14 -10
- psychopy/app/builder/dialogs/__init__.py +8 -8
- psychopy/app/builder/dialogs/dlgsConditions.py +12 -13
- psychopy/app/builder/dialogs/paramCtrls.py +24 -57
- psychopy/app/builder/validators.py +2 -2
- psychopy/app/coder/codeEditorBase.py +8 -8
- psychopy/app/coder/coder.py +4 -4
- psychopy/app/connections/sendusage.py +2 -2
- psychopy/app/connections/updates.py +9 -9
- psychopy/app/dialogs.py +34 -2
- psychopy/app/idle.py +31 -0
- psychopy/app/jobs.py +21 -3
- psychopy/app/linuxconfig/__init__.py +9 -0
- psychopy/app/locale/ar_001/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ar_001/LC_MESSAGE/messages.po +4602 -2540
- psychopy/app/locale/es_CO/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/es_CO/LC_MESSAGE/messages.po +56 -54
- psychopy/app/locale/es_ES/LC_MESSAGE/messages.po +53 -43
- psychopy/app/locale/es_US/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/es_US/LC_MESSAGE/messages.po +56 -54
- psychopy/app/locale/ja_JP/LC_MESSAGE/messages.mo +0 -0
- psychopy/app/locale/ja_JP/LC_MESSAGE/messages.po +1011 -942
- psychopy/app/locale/pt_PT/LC_MESSAGE/messages.po +9415 -5
- psychopy/app/pavlovia_ui/_base.py +33 -3
- psychopy/app/pavlovia_ui/search.py +0 -1
- psychopy/app/plugin_manager/dialog.py +104 -51
- psychopy/app/plugin_manager/packages.py +5 -0
- psychopy/app/plugin_manager/plugins.py +145 -67
- psychopy/app/preferencesDlg.py +8 -8
- psychopy/app/psychopyApp.py +11 -5
- psychopy/app/ribbon.py +124 -14
- psychopy/app/runner/runner.py +6 -1
- psychopy/app/stdout/stdOutRich.py +27 -11
- psychopy/app/themes/icons.py +52 -2
- psychopy/assets/__init__.py +0 -0
- psychopy/assets/click.png +0 -0
- psychopy/assets/clicknext.png +0 -0
- psychopy/assets/next.png +0 -0
- psychopy/assets/psychopy.ico +0 -0
- psychopy/assets/psychopy.png +0 -0
- psychopy/assets/templates/__init__.py +0 -0
- psychopy/assets/touch.png +0 -0
- psychopy/assets/touchnext.png +0 -0
- psychopy/assets/window.ico +0 -0
- psychopy/changes/2023.1.0.md +9 -0
- psychopy/changes/2024.1.0.md +16 -0
- psychopy/changes/__init__.py +0 -0
- psychopy/clock.py +2 -2
- psychopy/colors.py +2 -1
- psychopy/compatibility.py +53 -1
- psychopy/contrib/.DS_Store +0 -0
- psychopy/contrib/configobj/__init__.py +10 -8
- psychopy/data/__init__.py +3 -2
- psychopy/data/base.py +5 -5
- psychopy/data/experiment.py +130 -4
- psychopy/data/routine.py +56 -0
- psychopy/data/staircase.py +2 -2
- psychopy/data/trial.py +559 -97
- psychopy/data/utils.py +56 -21
- psychopy/demos/.DS_Store +0 -0
- psychopy/demos/builder/.DS_Store +0 -0
- psychopy/demos/builder/Design Templates/.DS_Store +0 -0
- psychopy/demos/builder/Experiments/.DS_Store +0 -0
- psychopy/demos/builder/Feature Demos/.DS_Store +0 -0
- psychopy/demos/builder/Feature Demos/buttonBox/buttonBoxDemo.psyexp +375 -0
- psychopy/demos/builder/Feature Demos/buttonBox/readme.md +5 -0
- psychopy/demos/builder/Feature Demos/pilotMode/pilotMode.psyexp +433 -0
- psychopy/demos/builder/Feature Demos/pilotMode/readme.md +7 -0
- psychopy/demos/builder/Hardware/.DS_Store +0 -0
- psychopy/demos/builder/Helper Tools/.DS_Store +0 -0
- psychopy/demos/coder/.DS_Store +0 -0
- psychopy/demos/coder/hardware/testSoundLatency.py +2 -2
- psychopy/demos/coder/iohub/.DS_Store +0 -0
- psychopy/demos/coder/misc/hdf5_2_csv +33 -0
- psychopy/event.py +30 -29
- psychopy/experiment/.DS_Store +0 -0
- psychopy/experiment/_experiment.py +6 -6
- psychopy/experiment/components/.DS_Store +0 -0
- psychopy/experiment/components/__init__.py +6 -3
- psychopy/experiment/components/_base.py +286 -131
- psychopy/experiment/components/aperture/.DS_Store +0 -0
- psychopy/experiment/components/brush/.DS_Store +0 -0
- psychopy/experiment/components/button/.DS_Store +0 -0
- psychopy/experiment/components/button/__init__.py +5 -1
- psychopy/experiment/components/buttonBox/.DS_Store +0 -0
- psychopy/experiment/components/camera/.DS_Store +0 -0
- psychopy/experiment/components/code/.DS_Store +0 -0
- psychopy/experiment/components/dots/.DS_Store +0 -0
- psychopy/experiment/components/eyetracker_record/.DS_Store +0 -0
- psychopy/experiment/components/eyetracker_record/__init__.py +92 -30
- psychopy/experiment/components/form/.DS_Store +0 -0
- psychopy/experiment/components/form/__init__.py +6 -2
- psychopy/experiment/components/grating/.DS_Store +0 -0
- psychopy/experiment/components/grating/__init__.py +14 -3
- psychopy/experiment/components/image/.DS_Store +0 -0
- psychopy/experiment/components/image/__init__.py +14 -3
- psychopy/experiment/components/joyButtons/.DS_Store +0 -0
- psychopy/experiment/components/joystick/.DS_Store +0 -0
- psychopy/experiment/components/keyboard/.DS_Store +0 -0
- psychopy/experiment/components/keyboard/__init__.py +22 -10
- psychopy/experiment/components/microphone/.DS_Store +0 -0
- psychopy/experiment/components/microphone/__init__.py +59 -39
- psychopy/experiment/components/mouse/.DS_Store +0 -0
- psychopy/experiment/components/mouse/__init__.py +44 -29
- psychopy/experiment/components/movie/.DS_Store +0 -0
- psychopy/experiment/components/movie/__init__.py +1 -1
- psychopy/experiment/components/panorama/.DS_Store +0 -0
- psychopy/experiment/components/parallelOut/.DS_Store +0 -0
- psychopy/experiment/components/patch/.DS_Store +0 -0
- psychopy/experiment/components/polygon/.DS_Store +0 -0
- psychopy/experiment/components/polygon/__init__.py +26 -6
- psychopy/experiment/components/progress/.DS_Store +0 -0
- psychopy/experiment/components/ratingScale/.DS_Store +0 -0
- psychopy/experiment/components/resourceManager/.DS_Store +0 -0
- psychopy/experiment/components/roi/.DS_Store +0 -0
- psychopy/experiment/components/roi/__init__.py +5 -0
- psychopy/experiment/components/routineSettings/.DS_Store +0 -0
- psychopy/experiment/components/routineSettings/__init__.py +57 -10
- psychopy/experiment/components/serialOut/.DS_Store +0 -0
- psychopy/experiment/components/settings/.DS_Store +0 -0
- psychopy/experiment/components/settings/__init__.py +117 -42
- psychopy/experiment/components/slider/.DS_Store +0 -0
- psychopy/experiment/components/sound/.DS_Store +0 -0
- psychopy/experiment/components/sound/__init__.py +54 -19
- psychopy/experiment/components/static/.DS_Store +0 -0
- psychopy/experiment/components/static/__init__.py +1 -1
- psychopy/experiment/components/text/.DS_Store +0 -0
- psychopy/experiment/components/text/__init__.py +28 -3
- psychopy/experiment/components/textbox/.DS_Store +0 -0
- psychopy/experiment/components/textbox/__init__.py +12 -2
- psychopy/experiment/components/unknown/.DS_Store +0 -0
- psychopy/experiment/components/unknown/__init__.py +1 -2
- psychopy/experiment/components/unknownPlugin/.DS_Store +0 -0
- psychopy/experiment/components/unknownPlugin/__init__.py +2 -2
- psychopy/experiment/components/variable/.DS_Store +0 -0
- psychopy/experiment/flow.py +11 -4
- psychopy/experiment/loops.py +85 -37
- psychopy/experiment/params.py +74 -32
- psychopy/experiment/py2js_transpiler.py +8 -1
- psychopy/experiment/routines/.DS_Store +0 -0
- psychopy/experiment/routines/_base.py +102 -22
- psychopy/experiment/routines/counterbalance/.DS_Store +0 -0
- psychopy/experiment/routines/counterbalance/__init__.py +5 -1
- psychopy/experiment/routines/eyetracker_calibrate/.DS_Store +0 -0
- psychopy/experiment/routines/eyetracker_validate/.DS_Store +0 -0
- psychopy/experiment/routines/pavlovia_survey/.DS_Store +0 -0
- psychopy/experiment/routines/photodiodeValidator/.DS_Store +0 -0
- psychopy/experiment/routines/photodiodeValidator/__init__.py +6 -5
- psychopy/experiment/routines/unknown/.DS_Store +0 -0
- psychopy/gui/wxgui.py +4 -4
- psychopy/hardware/.DS_Store +0 -0
- psychopy/hardware/__init__.py +1 -1
- psychopy/hardware/base.py +12 -0
- psychopy/hardware/camera/__init__.py +1 -15
- psychopy/hardware/cedrus.py +10 -11
- psychopy/hardware/crs/colorcal.py +13 -22
- psychopy/hardware/crs/optical.py +10 -20
- psychopy/hardware/emulator.py +17 -14
- psychopy/hardware/eyetracker.py +42 -118
- psychopy/hardware/gammasci.py +4 -15
- psychopy/hardware/keyboard.py +102 -10
- psychopy/hardware/listener.py +3 -0
- psychopy/hardware/microphone.py +148 -18
- psychopy/hardware/minolta.py +8 -15
- psychopy/hardware/photodiode.py +191 -16
- psychopy/hardware/photometer/__init__.py +11 -19
- psychopy/hardware/pr.py +8 -15
- psychopy/hardware/speaker.py +39 -4
- psychopy/info.py +0 -71
- psychopy/iohub/.DS_Store +0 -0
- psychopy/iohub/__init__.py +1 -1
- psychopy/iohub/client/__init__.py +30 -20
- psychopy/iohub/client/keyboard.py +24 -24
- psychopy/iohub/datastore/__init__.py +2 -2
- psychopy/iohub/datastore/util.py +2 -2
- psychopy/iohub/default_config.yaml +1 -1
- psychopy/iohub/devices/.DS_Store +0 -0
- psychopy/iohub/devices/__init__.py +112 -25
- psychopy/iohub/devices/deviceConfigValidation.py +2 -1
- psychopy/iohub/devices/experiment/default_experiment.yaml +12 -1
- psychopy/iohub/devices/experiment/supported_config_settings.yaml +5 -1
- psychopy/iohub/devices/eyetracker/.DS_Store +0 -0
- psychopy/iohub/devices/eyetracker/__init__.py +46 -0
- psychopy/iohub/devices/eyetracker/calibration/procedure.py +2 -2
- psychopy/iohub/devices/eyetracker/hw/gazepoint/__init__.py +14 -2
- psychopy/iohub/devices/eyetracker/hw/mouse/eyetracker.py +3 -4
- psychopy/iohub/server.py +2 -2
- psychopy/iohub/start_iohub_process.py +3 -0
- psychopy/iohub/util/__init__.py +62 -70
- psychopy/layout.py +5 -5
- psychopy/logging.py +8 -1
- psychopy/microphone.py +10 -37
- psychopy/platform_specific/__init__.py +0 -2
- psychopy/platform_specific/darwin.py +1 -3
- psychopy/platform_specific/linux.py +31 -33
- psychopy/platform_specific/win32.py +38 -13
- psychopy/plugins/__init__.py +148 -116
- psychopy/plugins/util.py +39 -0
- psychopy/preferences/Darwin.spec +4 -2
- psychopy/preferences/FreeBSD.spec +4 -2
- psychopy/preferences/Linux.spec +4 -2
- psychopy/preferences/Windows.spec +4 -2
- psychopy/preferences/baseNoArch.spec +4 -2
- psychopy/preferences/preferences.py +47 -24
- psychopy/projects/pavlovia.py +47 -4
- psychopy/scripts/psyexpCompile.py +0 -4
- psychopy/session.py +153 -21
- psychopy/sound/__init__.py +31 -21
- psychopy/sound/_base.py +20 -3
- psychopy/sound/audioclip.py +320 -33
- psychopy/sound/backend_ptb.py +47 -58
- psychopy/sound/backend_pygame.py +1 -1
- psychopy/sound/backend_pysound.py +6 -15
- psychopy/sound/transcribe.py +53 -0
- psychopy/tests/.DS_Store +0 -0
- psychopy/tests/data/.DS_Store +0 -0
- psychopy/tests/data/TestUnknownPluginComponent_load_resave.psyexp +135 -0
- psychopy/tests/data/Test_textbox/test_ori_0_bottom right.png +0 -0
- psychopy/tests/data/Test_textbox/test_ori_0_center.png +0 -0
- psychopy/tests/data/Test_textbox/test_ori_0_top left.png +0 -0
- psychopy/tests/data/Test_textbox/test_ori_120_bottom right.png +0 -0
- psychopy/tests/data/Test_textbox/test_ori_120_center.png +0 -0
- psychopy/tests/data/Test_textbox/test_ori_120_top left.png +0 -0
- psychopy/tests/data/Test_textbox/test_ori_180_bottom right.png +0 -0
- psychopy/tests/data/Test_textbox/test_ori_180_center.png +0 -0
- psychopy/tests/data/Test_textbox/test_ori_180_top left.png +0 -0
- psychopy/tests/data/Test_textbox/test_ori_240_bottom right.png +0 -0
- psychopy/tests/data/Test_textbox/test_ori_240_center.png +0 -0
- psychopy/tests/data/Test_textbox/test_ori_240_top left.png +0 -0
- psychopy/tests/data/correctScript/.DS_Store +0 -0
- psychopy/tests/data/test_components/testClearKeyboard/testClearKeyboard.psyexp +200 -0
- psychopy/tests/data/test_session/.DS_Store +0 -0
- psychopy/tests/data/test_session/root/testFutureTrials/testFutureTrials.psyexp +155 -0
- psychopy/tests/data/test_session/root/testTrialNav/trialNav.psyexp +158 -0
- psychopy/tests/test_app/.DS_Store +0 -0
- psychopy/tests/test_app/conftest.py +2 -2
- psychopy/tests/test_app/test_speed.py +4 -1
- psychopy/tests/test_data/test_TrialHandler2.py +146 -1
- psychopy/tests/test_experiment/.DS_Store +0 -0
- psychopy/tests/test_experiment/needs_wx/genComponsTemplate.py +3 -3
- psychopy/tests/test_experiment/needs_wx/test_components.py +2 -2
- psychopy/tests/test_experiment/test_components/test_KeyboardComponent.py +28 -0
- psychopy/tests/test_experiment/test_components/test_UnknownPluginComponent.py +27 -0
- psychopy/tests/test_experiment/test_components/test_base_components.py +58 -0
- psychopy/tests/test_experiment/test_py2js.py +1 -1
- psychopy/tests/test_hardware/test_keyboard.py +31 -0
- psychopy/tests/test_hardware/test_ports.py +1 -11
- psychopy/tests/test_liaison/test_Liaison.py +47 -0
- psychopy/tests/test_misc/test_core.py +5 -0
- psychopy/tests/test_session/test_Session.py +5 -1
- psychopy/tests/test_tools/test_versionchooser.py +39 -8
- psychopy/tests/test_visual/test_all_stimuli.py +0 -97
- psychopy/tests/test_visual/test_image.py +6 -5
- psychopy/tests/test_visual/test_textbox.py +36 -0
- psychopy/tests/utils.py +4 -0
- psychopy/tools/filetools.py +1 -1
- psychopy/tools/pkgtools.py +160 -137
- psychopy/tools/versionchooser.py +10 -10
- psychopy/tools/wizard.py +3 -3
- psychopy/visual/.DS_Store +0 -0
- psychopy/visual/backends/pygletbackend.py +24 -13
- psychopy/visual/basevisual.py +5 -11
- psychopy/visual/button.py +2 -14
- psychopy/visual/helpers.py +5 -5
- psychopy/visual/line.py +1 -2
- psychopy/visual/movie2.py +7 -816
- psychopy/visual/movie3.py +7 -589
- psychopy/visual/movies/__init__.py +8 -11
- psychopy/visual/movies/frame.py +5 -2
- psychopy/visual/movies/players/ffpyplayer_player.py +5 -2
- psychopy/visual/noise.py +8 -7
- psychopy/visual/patch.py +7 -16
- psychopy/visual/radial.py +9 -7
- psychopy/visual/ratingscale.py +8 -1415
- psychopy/visual/secondorder.py +10 -9
- psychopy/visual/shape.py +7 -2
- psychopy/visual/text.py +1 -1
- psychopy/visual/textbox2/textbox2.py +28 -5
- {psychopy-2024.1.4.dist-info → psychopy-2024.2.0.dist-info}/METADATA +8 -13
- {psychopy-2024.1.4.dist-info → psychopy-2024.2.0.dist-info}/RECORD +307 -213
- {psychopy-2024.1.4.dist-info → psychopy-2024.2.0.dist-info}/WHEEL +1 -1
- psychopy/app/Resources/click.png +0 -0
- psychopy/app/Resources/next.png +0 -0
- psychopy/experiment/components/patch/__init__.py +0 -121
- psychopy/experiment/components/patch/classic/patch.png +0 -0
- psychopy/experiment/components/patch/dark/patch.png +0 -0
- psychopy/experiment/components/patch/dark/patch@2x.png +0 -0
- psychopy/experiment/components/patch/light/patch.png +0 -0
- psychopy/experiment/components/patch/light/patch@2x.png +0 -0
- psychopy/experiment/components/ratingScale/__init__.py +0 -337
- psychopy/experiment/components/ratingScale/classic/ratingscale.png +0 -0
- psychopy/experiment/components/ratingScale/classic/ratingscale@2x.png +0 -0
- psychopy/experiment/components/ratingScale/dark/ratingScale@2x.png +0 -0
- psychopy/experiment/components/ratingScale/dark/ratingscale.png +0 -0
- psychopy/experiment/components/ratingScale/light/ratingScale@2x.png +0 -0
- psychopy/experiment/components/ratingScale/light/ratingscale.png +0 -0
- psychopy/platform_specific/posix.py +0 -16
- psychopy/tests/test_sound/test_microphone.py +0 -217
- psychopy/tests/test_visual/test_ratingScale.py +0 -299
- /psychopy/{app/Resources → assets}/Psychopy Window Favicon@16w.png +0 -0
- /psychopy/{app/Resources → assets}/Psychopy Window Favicon@32w.png +0 -0
- /psychopy/{app/Resources → assets}/USB-C.png +0 -0
- /psychopy/{app/Resources → assets}/USB.png +0 -0
- /psychopy/{app/Resources → assets}/creditCard.png +0 -0
- /psychopy/{app/Resources → assets}/default.mp3 +0 -0
- /psychopy/{app/Resources → assets}/default.mp4 +0 -0
- /psychopy/{app/Resources → assets}/default.png +0 -0
- /psychopy/{app/Resources → assets/templates}/instruct1.png +0 -0
- /psychopy/{app/Resources → assets/templates}/instruct2.png +0 -0
- {psychopy-2024.1.4.dist-info → psychopy-2024.2.0.dist-info}/entry_points.txt +0 -0
- {psychopy-2024.1.4.dist-info → psychopy-2024.2.0.dist-info}/licenses/AUTHORS.md +0 -0
- {psychopy-2024.1.4.dist-info → psychopy-2024.2.0.dist-info}/licenses/LICENSE +0 -0
psychopy/event.py
CHANGED
|
@@ -33,6 +33,8 @@ except ImportError:
|
|
|
33
33
|
havePyglet = False
|
|
34
34
|
try:
|
|
35
35
|
import glfw
|
|
36
|
+
if not glfw.init():
|
|
37
|
+
raise ImportError
|
|
36
38
|
haveGLFW = True
|
|
37
39
|
except ImportError:
|
|
38
40
|
haveGLFW = False
|
|
@@ -52,15 +54,6 @@ if haveGLFW:
|
|
|
52
54
|
else:
|
|
53
55
|
useGLFW = False
|
|
54
56
|
|
|
55
|
-
|
|
56
|
-
if havePyglet:
|
|
57
|
-
# get the default display
|
|
58
|
-
if pyglet.version < '1.4':
|
|
59
|
-
_default_display_ = pyglet.window.get_platform().get_default_display()
|
|
60
|
-
else:
|
|
61
|
-
_default_display_ = pyglet.canvas.get_display()
|
|
62
|
-
|
|
63
|
-
|
|
64
57
|
import psychopy.core
|
|
65
58
|
from psychopy.tools.monitorunittools import cm2pix, deg2pix, pix2cm, pix2deg
|
|
66
59
|
from psychopy import logging
|
|
@@ -407,11 +400,14 @@ def getKeys(keyList=None, modifiers=False, timeStamped=False):
|
|
|
407
400
|
for evts in evt.get(locals.KEYDOWN):
|
|
408
401
|
# pygame has no keytimes
|
|
409
402
|
keys.append((pygame.key.name(evts.key), 0))
|
|
410
|
-
|
|
403
|
+
|
|
404
|
+
global _keyBuffer
|
|
405
|
+
|
|
406
|
+
if havePyglet:
|
|
411
407
|
# for each (pyglet) window, dispatch its events before checking event
|
|
412
408
|
# buffer
|
|
413
409
|
windowSystem = 'pyglet'
|
|
414
|
-
for win in
|
|
410
|
+
for win in pyglet.app.windows:
|
|
415
411
|
try:
|
|
416
412
|
win.dispatch_events() # pump events on pyglet windows
|
|
417
413
|
except ValueError as e: # pragma: no cover
|
|
@@ -420,16 +416,14 @@ def getKeys(keyList=None, modifiers=False, timeStamped=False):
|
|
|
420
416
|
# specific to certain systems and versions of Python.
|
|
421
417
|
logging.error(u'Failed to handle keypress')
|
|
422
418
|
|
|
423
|
-
global _keyBuffer
|
|
424
419
|
if len(_keyBuffer) > 0:
|
|
425
420
|
# then pyglet is running - just use this
|
|
426
421
|
keys = _keyBuffer
|
|
427
422
|
# _keyBuffer = [] # DO /NOT/ CLEAR THE KEY BUFFER ENTIRELY
|
|
428
423
|
|
|
429
|
-
|
|
424
|
+
if haveGLFW:
|
|
430
425
|
windowSystem = 'glfw'
|
|
431
|
-
|
|
432
|
-
# populate the buffer
|
|
426
|
+
glfw.poll_events()
|
|
433
427
|
if len(_keyBuffer) > 0:
|
|
434
428
|
keys = _keyBuffer
|
|
435
429
|
|
|
@@ -530,11 +524,6 @@ def waitKeys(maxWait=float('inf'), keyList=None, modifiers=False,
|
|
|
530
524
|
got_keypress = False
|
|
531
525
|
|
|
532
526
|
while not got_keypress and timer.getTime() < maxWait:
|
|
533
|
-
# Pump events on pyglet windows if they exist.
|
|
534
|
-
if havePyglet:
|
|
535
|
-
for win in _default_display_.get_windows():
|
|
536
|
-
win.dispatch_events()
|
|
537
|
-
|
|
538
527
|
# Get keypresses and return if anything is pressed.
|
|
539
528
|
keys = getKeys(keyList=keyList, modifiers=modifiers,
|
|
540
529
|
timeStamped=timeStamped)
|
|
@@ -563,8 +552,8 @@ class Mouse:
|
|
|
563
552
|
Create your `visual.Window` before creating a Mouse.
|
|
564
553
|
|
|
565
554
|
:Parameters:
|
|
566
|
-
visible :
|
|
567
|
-
|
|
555
|
+
visible : bool or None
|
|
556
|
+
Show the mouse if True, hide it if False, leave it as is if None (default)
|
|
568
557
|
newPos : **None** or [x,y]
|
|
569
558
|
gives the mouse a particular starting position
|
|
570
559
|
(pygame `Window` only)
|
|
@@ -574,7 +563,7 @@ class Mouse:
|
|
|
574
563
|
"""
|
|
575
564
|
|
|
576
565
|
def __init__(self,
|
|
577
|
-
visible=
|
|
566
|
+
visible=None,
|
|
578
567
|
newPos=None,
|
|
579
568
|
win=None):
|
|
580
569
|
super(Mouse, self).__init__()
|
|
@@ -609,7 +598,8 @@ class Mouse:
|
|
|
609
598
|
global usePygame
|
|
610
599
|
if havePygame and not pygame.display.get_init():
|
|
611
600
|
usePygame = False
|
|
612
|
-
|
|
601
|
+
if visible is not None:
|
|
602
|
+
self.setVisible(visible)
|
|
613
603
|
if newPos is not None:
|
|
614
604
|
self.setPos(newPos)
|
|
615
605
|
|
|
@@ -887,12 +877,14 @@ class Mouse:
|
|
|
887
877
|
if usePygame:
|
|
888
878
|
return mouse.get_pressed()
|
|
889
879
|
else:
|
|
890
|
-
# False: # havePyglet: # like in getKeys - pump the events
|
|
891
880
|
# for each (pyglet) window, dispatch its events before checking
|
|
892
881
|
# event buffer
|
|
882
|
+
if havePyglet:
|
|
883
|
+
for win in pyglet.app.windows:
|
|
884
|
+
win.dispatch_events() # pump events on pyglet windows
|
|
893
885
|
|
|
894
|
-
|
|
895
|
-
|
|
886
|
+
if haveGLFW:
|
|
887
|
+
glfw.poll_events()
|
|
896
888
|
|
|
897
889
|
# else:
|
|
898
890
|
if not getTime:
|
|
@@ -996,8 +988,12 @@ def clearEvents(eventType=None):
|
|
|
996
988
|
if not havePygame or not display.get_init(): # pyglet
|
|
997
989
|
# For each window, dispatch its events before
|
|
998
990
|
# checking event buffer.
|
|
999
|
-
|
|
1000
|
-
win
|
|
991
|
+
if havePyglet:
|
|
992
|
+
for win in pyglet.app.windows:
|
|
993
|
+
win.dispatch_events() # pump events on pyglet windows
|
|
994
|
+
|
|
995
|
+
if haveGLFW:
|
|
996
|
+
glfw.poll_events()
|
|
1001
997
|
|
|
1002
998
|
if eventType == 'mouse':
|
|
1003
999
|
pass
|
|
@@ -1223,6 +1219,11 @@ def _onGLFWKey(*args, **kwargs):
|
|
|
1223
1219
|
|
|
1224
1220
|
# TODO - support for key emulation
|
|
1225
1221
|
win_ptr, key, scancode, action, modifiers = args
|
|
1222
|
+
|
|
1223
|
+
# only send events for PRESS and REPEAT to match pyglet behavior
|
|
1224
|
+
if action == glfw.RELEASE:
|
|
1225
|
+
return
|
|
1226
|
+
|
|
1226
1227
|
global useText
|
|
1227
1228
|
|
|
1228
1229
|
if key == glfw.KEY_UNKNOWN:
|
|
Binary file
|
|
@@ -22,7 +22,7 @@ import xml.etree.ElementTree as xml
|
|
|
22
22
|
from xml.dom import minidom
|
|
23
23
|
from copy import deepcopy, copy
|
|
24
24
|
from pathlib import Path
|
|
25
|
-
from
|
|
25
|
+
from packaging.version import Version
|
|
26
26
|
|
|
27
27
|
import psychopy
|
|
28
28
|
from psychopy import data, __version__, logging
|
|
@@ -469,13 +469,13 @@ class Experiment:
|
|
|
469
469
|
# copy self
|
|
470
470
|
exp = deepcopy(self)
|
|
471
471
|
# parse version
|
|
472
|
-
targetVersion =
|
|
472
|
+
targetVersion = Version(targetVersion)
|
|
473
473
|
# change experiment version
|
|
474
474
|
exp.psychopyVersion = targetVersion
|
|
475
475
|
# iterate through Routines
|
|
476
476
|
for rtName, rt in copy(exp.routines).items():
|
|
477
477
|
# if Routine was added after the target version, remove it
|
|
478
|
-
if hasattr(type(rt), "version") and
|
|
478
|
+
if hasattr(type(rt), "version") and Version(rt.version) > targetVersion:
|
|
479
479
|
exp.routines.pop(rtName)
|
|
480
480
|
# if Routine is a standalone, we're done
|
|
481
481
|
if isinstance(rt, BaseStandaloneRoutine):
|
|
@@ -483,7 +483,7 @@ class Experiment:
|
|
|
483
483
|
# iterate through Components
|
|
484
484
|
for comp in copy(rt):
|
|
485
485
|
# if Component was added after target version, remove it
|
|
486
|
-
if hasattr(type(comp), "version") and
|
|
486
|
+
if hasattr(type(comp), "version") and Version(comp.version) > targetVersion:
|
|
487
487
|
i = rt.index(comp)
|
|
488
488
|
rt.pop(i)
|
|
489
489
|
|
|
@@ -789,10 +789,10 @@ class Experiment:
|
|
|
789
789
|
return
|
|
790
790
|
self.psychopyVersion = root.get('version')
|
|
791
791
|
# If running an experiment from a future version, send alert to change "Use Version"
|
|
792
|
-
if
|
|
792
|
+
if Version(psychopy.__version__) < Version(self.psychopyVersion):
|
|
793
793
|
alert(code=4051, strFields={'version': self.psychopyVersion})
|
|
794
794
|
# If versions are either side of 2021, send alert
|
|
795
|
-
if
|
|
795
|
+
if Version(psychopy.__version__) >= Version("2021.1.0") > Version(self.psychopyVersion):
|
|
796
796
|
alert(code=4052, strFields={'version': self.psychopyVersion})
|
|
797
797
|
|
|
798
798
|
# Parse document nodes
|
|
Binary file
|
|
@@ -395,10 +395,13 @@ def getInitVals(params, target="PsychoPy"):
|
|
|
395
395
|
elif name in ('movie', 'latitude', 'longitude', 'elevation', 'azimuth', 'speechPoint'):
|
|
396
396
|
inits[name].val = 'None'
|
|
397
397
|
inits[name].valType = 'code'
|
|
398
|
+
elif name == 'allowedKeys':
|
|
399
|
+
inits[name].val = "[]"
|
|
400
|
+
inits[name].valType = 'code'
|
|
398
401
|
else:
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
+
# if not explicitly handled, default to None
|
|
403
|
+
inits[name].val = "None"
|
|
404
|
+
inits[name].valType = "code"
|
|
402
405
|
|
|
403
406
|
return inits
|
|
404
407
|
|