我已经在python3.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窗口,不工作的机器不会打开任何东西。
我逐步完成了图形函数(在不能工作的机器中),并发现在执行堆栈的此时,它开始偏离:
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)
查看器是一个mayavi.core.null_engine.DummyViewer对象,与机器一样,查看器是一个mayavi.core.ui.mayavi_scene.MayaviViewer对象。
我还发现传递给self.scene_factory的self.scene_factory是它不能工作的机器中的{},它在它工作的机器中是{'size':(400,350)}。
我正在努力理解scene_factory是如何工作的,但这是一个有点令人畏惧的任务。
发布于 2016-12-10 13:10:54
我找到了解决办法!
通过遍历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。但是,它已经有一个变量集为后端='auto'。
然后,我发现脚本mayavi.scripts.mayavi2.py显示了一个数据可视化器。如果我们选择菜单选项Tools/Preferences/Mayavi/Mlab,字段后端被设置为'test‘。我将其更改为“auto”,然后mayavi boy.py示例又开始工作了!
一件令人困惑的事情是,我回到了最初的Python3.5安装和最初的虚拟环境。我运行了boy.py示例,它在安装过程中不需要做任何操作。因此,我怀疑这些设置是存储在python或virtualenv文件夹之外的其他地方,可能是在windows注册表中?这就是为什么重新安装mayavi,即使是在一个新的虚拟环境中,使用一个新的python安装也不能解决这个问题!
我不知道后端是如何改变的,也许我是在试验mayavi的时候自己改变的。但是,我认为这些首选项不应该在虚拟环境或使用中的python安装之外持久存在。
https://stackoverflow.com/questions/40984287
复制