我运行了一个python程序,它使用Mayavi来显示地理参考的DEM(数字高程模型)。它在Anaconda环境下运行非常好。但是,在windows上运行时,需要为UI安装PyQt/PySide/wxpython (显示3D模型)。
在运行代码时,它开始抛出此错误。
wx._core.wxAssertionError: C++ assertion "strcmp(setlocale(0, 0), "C") == 0" failed at ..\..\src\common\intl.cpp(1694) in wxLocale::GetInfo(): You probably called setlocale() directly instead of using wxLocale and now there is a mismatch between C/C++ and Windows locale.
Things are going to break, please only change locale by creating wxLocale objects to avoid this!我建议this 1和this 2通过在代码开头包括以下内容来解决这个错误
import locale
locale.setlocale(locale.LC_ALL, 'C')还有另一个错误。此错误是由于文件_C:\Python38\lib\site-packages\tvtk\pyface\ui\wx_decorated_scene.py中的命令m.set_outline_color(1,1,1)与当前版本的wx不兼容造成的。
错误:
D:\supriya\CODES_ALL>python 3D_Mayavi_Interactive_Plot.py
wx
Traceback (most recent call last):
File "3D_Mayavi_Interactive_Plot.py", line 286, in <module>
surf = mlab.surf(data, color=(1,1,1), warp_scale=0.5) #
File "C:\Python38\lib\site-packages\mayavi\tools\helper_functions.py", line 38, in the_function
return pipeline(*args, **kwargs)
File "C:\Python38\lib\site-packages\mayavi\tools\helper_functions.py", line 78, in __call__
scene = tools.gcf().scene
File "C:\Python38\lib\site-packages\mayavi\tools\figure.py", line 117, in gcf
return figure(engine=engine)
File "C:\Python38\lib\site-packages\mayavi\tools\figure.py", line 69, in figure
engine.new_scene(name=name, size=size)
File "C:\Python38\lib\site-packages\apptools\scripting\recordable.py", line 48, in _wrapper
result = func(*args, **kw)
File "C:\Python38\lib\site-packages\mayavi\core\engine.py", line 452, in new_scene
viewer = self.scene_factory(**factory_kwargs)
File "C:\Python38\lib\site-packages\mayavi\core\ui\mayavi_scene.py", line 89, in viewer_factory
viewer.open()
File "C:\Python38\lib\site-packages\pyface\i_window.py", line 203, in open
self._create()
File "C:\Python38\lib\site-packages\pyface\ui\wx\application_window.py", line 125, in _create
contents = self._create_contents(self.control)
File "C:\Python38\lib\site-packages\tvtk\tools\ivtk.py", line 406, in _create_contents
self.scene = self._scene_factory(parent)
File "C:\Python38\lib\site-packages\mayavi\core\ui\mayavi_scene.py", line 68, in mayavi_scene_factory
s = MayaviScene(parent, stereo=p['stereo'])
File "C:\Python38\lib\site-packages\tvtk\pyface\ui\wx\decorated_scene.py", line 70, in __init__
self._setup_axes_marker()
File "C:\Python38\lib\site-packages\tvtk\pyface\ui\wx\decorated_scene.py", line 127, in _setup_axes_marker
self._background_changed(self.background)
File "C:\Python38\lib\site-packages\tvtk\pyface\ui\wx\decorated_scene.py", line 204, in _background_changed
m.outline_color(0,0,0)
TypeError: 'tuple' object is not callable
Error in atexit._run_exitfuncs:
wx._core.wxAssertionError: C++ assertion "GetEventHandler() == this" failed at ..\..\src\common\wincmn.cpp(470) in wxWindowBase::~wxWindowBase(): any pushed event handlers must have been removed解决办法如下:
发布于 2021-11-19 12:56:41
开放_C:\Python38\lib\site-packages\tvtk\pyface\ui\wx_decorated_scene.py.
找到这一行m.set_outline_color(1,1,1)并将其替换为m.outline_color = (1,1,1)
完事了!
这是我在QnA格式的堆栈溢出上的第一篇文章。如果有什么需要我即兴发挥的,请指导我。
https://stackoverflow.com/questions/70035195
复制相似问题