PsychoPy выглядит как раз то, что мне нужно. Но я хочу использовать свою собственную среду разработки (простую подсказку IPython в сочетании с редактором по моему выбору) вместо предоставленной IDE.
Проблема в том, что вам, похоже, приходится выходить из Python и перезапускать его после каждого запуска PsychoPy. Если, например, я cd
перехожу в каталог ...../demos/coder/stimuli
и набираю run gabor.py
, он работает нормально, но если я снова набираю run gabor.py
, я получаю это исключение от pyglet:
C:\snap\PsychoPy2\lib\site-packages\pyglet\window\win32\__init__.pyc in _create(self)
259 if not self._wgl_context:
260 self.canvas = Win32Canvas(self.display, self._view_hwnd, self._dc)
--> 261 self.context.attach(self.canvas)
262 self._wgl_context = self.context._context
263
C:\snap\PsychoPy2\lib\site-packages\pyglet\gl\win32.pyc in attach(self, canvas)
261 self._context = wglext_arb.wglCreateContextAttribsARB(canvas.hdc,
262 share, attribs)
--> 263 super(Win32ARBContext, self).attach(canvas)
C:\snap\PsychoPy2\lib\site-packages\pyglet\gl\win32.pyc in attach(self, canvas)
206 raise RuntimeError('Share context has no canvas.')
207 if not wgl.wglShareLists(share._context, self._context):
--> 208 raise gl.ContextException('Unable to share contexts')
209
210 def set_current(self):
ContextException: Unable to share contexts
Есть ли какой-то pyglet.cleanup()
, который я могу вызвать (аналог pygame.quit()
), чтобы позволить сценариям PsychoPy запускаться более одного раза в одном сеансе? Или другой способ избежать этой проблемы?
Я использую автономный дистрибутив PsychoPy версии 1.81.02, нетронутый. Проблема не специфична для IPython — ее также можно продемонстрировать из простого приглашения Python, если вы отключите sys.exit
и дважды наберете execfile('gabor.py')
:
C:\snap\PsychoPy2\Lib\site-packages\PsychoPy-1.81.02-py2.7.egg\psychopy\demos\coder\stimuli>python
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import sys; sys.exit = lambda x:x
>>> execfile('gabor.py')
0.6560 WARNING Movie2 stim could not be imported and won't be available
1.6719 WARNING Monitor specification not found. Creating a temporary one...
>>>
>>> execfile('gabor.py')
Traceback (most recent call last):
[snip]
File "C:\snap\PsychoPy2\lib\site-packages\pyglet\gl\win32.py", line 208, in attach
raise gl.ContextException('Unable to share contexts')
pyglet.gl.ContextException: Unable to share contexts
pyglet.window.Window.close()
, который удаляет весь контекст текущего окна, но его нужно запускать на объекте, который инициировал само окно. поэтому вам нужно поместить инициированныйWindow()
в переменную и вызвать для нее.close()
. Я предполагаю, что это мало поможет, поскольку вы запускаете его внутри какой-то оболочки? - person Torxed   schedule 13.03.2015