Enthought встраивание Mayavi с проблемами wx
Сначала моя работающая система:
Я использую Windows 8 Pro и Mayavi 4.3 из репозитория вместе с wxPython 2.9.4.0 на Python 2.7.4, но у меня была та же проблема с mayavi 4.2.1 из пакета EPD...
Когда я пытаюсь встроить Mayavi в панель ноутбука, у меня возникают проблемы с пользовательским интерфейсом. Даже в демонстрационном файле от Mayavi я получил то же странное поведение внешних кадров, сгенерированных Mayavi.
Таким образом, с помощью кнопки настроек открывается окно настроек. Также сцена реагирует на параметры, которые я изменил, используя настройки. Но после нажатия ОК или алтаря окно не закрывается. И python возвращает несколько сообщений об ошибках. Было симулированное поведение, когда я использовал конвейер, реализовав команду mlab.show_pipeline().
Такое поведение также можно найти на примере с веб-страницы enthought.
Здесь вы можете увидеть мое сообщение об ошибке после попытки нажать OK во фрейме настроек примера Enthougth:
C:\my_directory\>python wx_embedding.py
C:\Python27\lib\site-packages\enthougth_development_mayavi_git\traitsui\traitsui\wx\toolkit.py:35: wxPyDeprecationWarning: Using deprecated class PySimpleApp.
_app = wx.PySimpleApp()
wx_embedding.py:63: wxPyDeprecationWarning: Using deprecated class PySimpleApp.
app = wx.PySimpleApp()
Traceback (most recent call last): File "C:\Python27\lib\site-packages\enthougth_development_mayavi_git\traitsui\traitsui\wx\ui_live.py", line 360, in _on_ok
self.close( wx.ID_OK )
File "C:\Python27\lib\site-packages\enthougth_development_mayavi_git\traitsui\traitsui\wx\ui_live.py", line 320, in close
ui.finish()
File "C:\Python27\lib\site-packages\enthougth_development_mayavi_git\traitsui\traitsui\ui.py", line 264, in finish
self.reset( destroy = True )
File "C:\Python27\lib\site-packages\enthougth_development_mayavi_git\traitsui\traitsui\ui.py", line 304, in reset
editor.dispose()
File "C:\Python27\lib\site-packages\enthougth_development_mayavi_git\traitsui\traitsui\wx\instance_editor.py", line 208, in dispose
self._ui.dispose()
File "C:\Python27\lib\site-packages\enthougth_development_mayavi_git\traitsui\traitsui\ui.py", line 237, in dispose
self.finish()
File "C:\Python27\lib\site-packages\enthougth_development_mayavi_git\traitsui\traitsui\ui.py", line 264, in finish
self.reset( destroy = True )
File "C:\Python27\lib\site-packages\enthougth_development_mayavi_git\traitsui\traitsui\ui.py", line 318, in reset
toolkit().destroy_children( self.control )
File "C:\Python27\lib\site-packages\enthougth_development_mayavi_git\traitsui\traitsui\wx\toolkit.py", line 474, in destroy_children
control.DestroyChildren()
File "C:\Python27\lib\site-packages\wx-2.9.4-msw\wx\_core.py", line 9203, in DestroyChildren
return _core_.Window_DestroyChildren(*args, **kwargs)
wx._core.PyAssertionError: C++ assertion "GetEventHandler() == this" failed at . .\..\src\common\wincmn.cpp(468) in wxWindowBase::~wxWindowBase(): any pushed event handlers must have been removed
заранее спасибо
2 ответа
Mayvi не совместим с wx 2.9.
Более подробная информация здесь: https://support.enthought.com/entries/22601196-wxPython
Пожалуйста, используйте enpkg, чтобы вернуться к wx 2.8, который поставляется с EPD.
По крайней мере, это конкретное исключение может быть решено с помощью изменений, связанных с этим PR: https://github.com/enthought/traitsui/pull/108. Я еще не знаю о Mayavi и остальном стеке, но это изменение, по крайней мере, заставит traitsui работать с wxPython 2.9.