我一直在python 3.5和windows 10机器上使用mayavi。今天我正在使用mayavi编写一些脚本,并且无缘无故(我知道)mayavi可视化窗口停止显示。事实上,任何mayavi示例都不再显示可视化窗口。脚本会在mlab.show()上等待,但它们不会显示任何内容。
我尝试过以下操作,但它仍然没有显示可视化窗口(每次只是在mlab.show()命令中等待):
可能不相关,但在窗口停止显示之前我做的最后一件事是从mayavi属性窗口录制一个脚本,我想看看哪些命令对应于将视点移动到某个地方。一旦我看到正在录制的命令,我就复制它们并关闭mayavi可视化窗口而不停止录制。从那一刻起,我经历了所描述的问题。
我一直在调试有效的机器上的boy.py示例,以及那些没有(两台机器都具有相同软件配置)的机器,我发现了第一点他们的执行偏离了。
创建数字时:
mlab.figure(fgcolor=(0, 0, 0), bgcolor=(1, 1, 1))
工作的机器打开一个空的vtk / mayavi窗口,没有工作的机器不会打开任何东西。
我单步执行figure函数(在没有工作的机器中),我发现执行堆栈中的这一点开始偏离:
boy.py, line 23
mlab.figure(fgcolor=(0, 0, 0), bgcolor=(1, 1, 1))
figure.py, line 68, in figure
engine.new_scene(name=name, size=size)
recordable.py, line 45, in _wrapper
result = func(*args, **kw)
engine.py, line 452, in new_scene
viewer = self.scene_factory(**factory_kwargs)
viewer是一个 mayavi.core.null_engine.DummyViewer 对象, 它在工作机器中的位置是一个 mayavi.core.ui.mayavi_scene.MayaviViewer 对象
我还发现传递给self.scene_factory的 factory_kwargs 在 {} 的机器中没有工作,并且 {' size':(400,350)} 在它运行的机器中。
我试图了解scene_factory的工作原理,但这有点令人生畏。
答案 0 :(得分:1)
我找到了解决方案!
单步执行mlab.figure()的代码,我发现执行堆栈的这一点:
boy.py, line 23
mlab.figure(fgcolor=(0, 0, 0), bgcolor=(1, 1, 1))
figure.py, line 63, in figure
engine = get_engine()
engine_manager.py, line 101, in get_engine
return self.new_engine()
engine_manager.py, line 154, in new_engine
elif options.backend == 'test':
后端是'test',它实例化了一个
engine = NullEngine(name='Null Mlab Engine')
在后端工作的机器中的是'auto'并且它实例化了一个
engine = Engine(name='Mlab Engine')
所以我搜索了这个后端是如何设置的,与 mayavi.preferences.prefence_manager.py 相关的东西我看到在同一个文件夹中有一个 preferences.ini 。但是,它已将变量设置为 backend ='auto'。
然后我发现脚本 mayavi.scripts.mayavi2.py 显示了一个数据可视化工具。如果我们选择菜单选项工具/偏好设置/ Mayavi / Mlab ,则字段后端设置为“测试”。我将其更改为'auto',然后mayavi boy.py示例再次开始工作!
令人困惑的是,我回到原来的Python 3.5安装和我原来的virtualenv。我运行了boy.py示例,它无需在该安装上执行任何操作。所以我怀疑这些设置是存储在python或virtualenv文件夹之外的其他地方,也许是在Windows注册表中?这就是为什么重新安装mayavi,即使在新的virtualenv和新的python安装没有解决问题!
我不确定后端是如何改变的,也许我在试验mayavi时自己改变了。但是,我认为这些首选项不应该在virtualenv或正在使用的python安装之外持久化。