我一直在python 3.5和Windows 10机器上使用Mayavi。今天,我正在使用Mayavi制作一些脚本,并且无缘无故(我知道)Mayavi可视化窗口停止出现。实际上,任何Mayavi示例都不会显示可视化窗口。脚本将在mlab.show()上等待,但它们不会显示任何内容。
我已经尝试了以下操作,但它仍然没有显示可视化窗口(每次都在mlab.show()命令上等待):
- 重新启动机器然后重试。
- PIP安装 - Mayavi,VTK和PYQT4的升级,然后再试一次。
- 我创建了一个新的Virtualenv并安装numpy,pyqt4,vtk,mayavi,然后重试。
- 我用mlab.show(stop = true)运行boy.py示例。stop = true显示一个带有按钮"停止交互"的窗口,以完成事件循环。我看到此窗口,但没有看到可视化窗口。我以为也许窗户在那里,但隐藏了。我找到了Winlister,可以显示所有窗口。我可以看到最后一个打开的窗口是两个Qwidget,一个是带有关闭按钮的窗口,显示为可见,另一个显示不可见。我将该窗口切换到可见的,我看到一个窗口可能是Mayavi可视化窗口,但它们都是空白的。
- 如果我逐步介绍mlab.show(),我发现它最终会在site-packages/pyface/pyface/utils/guisupport.py中转到函数start_event_loop_qt4(),并且它在呼叫中无限期地等待app.exec_(exexec_(exexec_(),什么都没有发生。
- 我已经安装了新的Python 3.5.2,创建一个新的虚拟环境并安装Numpy,Pyqt4,VTK,Mayavi,然后再试一次,同样的问题。
- 我去了另一台机器,安装了numpy,pyqt4,vtk,mayavi,示例效果很好(只是检查我不会发疯)。
可能是无关的,但是在窗口停止显示之前,我要做的最后一件事是从Mayavi属性窗口录制脚本,我想看看哪些命令对应于将视点移至某个位置。一旦看到命令记录,我就会复制它们并关闭Mayavi可视化窗口,而不会停止录音。从那一刻起,我经历了描述的问题。
更新:
我一直在调试机器上的boy.py示例,并且在不工作的机器上(两台机器都有相同的软件配置),我发现了他们的执行偏差的第一个点。<<<<<<<<<<<<<</p>
创建图形时:
mlab.figure(fgcolor=(0, 0, 0), bgcolor=(1, 1, 1))
有效的机器打开一个空的VTK/Mayavi窗口,无效的机器不会打开任何东西。
i逐步介绍数字函数(在计算机中无效),我发现在执行堆栈中的这一点上,它开始偏离:
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.core.null_engine.dummyviewer 对象,在计算机中的位置,Works Wighter是 Mayavi.core.ui.mayavi_scene.mayaviviewer 对象
我还发现 factory_kwargs 传递给self.scene_factory是 {} 在计算机中它不起作用,并且它是 {'size':'size':(400,350)} 在机器中工作。
我试图了解场景_Factory的工作原理,但这是有点艰巨的任务。
我找到了一个解决方案!
逐步浏览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':
后端是"测试",可以实例化
engine = NullEngine(name='Null Mlab Engine')
在机器中工作的后端是"自动",它实例化
engine = Engine(name='Mlab Engine')
所以我搜索了该后端的设置方式,与> mayavi.preferences.prefence_manager.py 有关>。但是,它已经具有一个变量集为 Backend ='auto'。
然后,我发现脚本 mayavi.scripts.mayavi2.py 显示了一个数据可视化器。如果我们选择菜单选项工具/preferences/mayavi/mlab 字段后端设置为'test'。我将其更改为"自动",然后将Mayavi Boy.Py示例开始工作了!
一件令人困惑的事情是,然后我回到了我的原始Python 3.5安装和原始Virtualenv。我运行了男孩。因此,我怀疑这些设置被存储在Python或Virtualenv文件夹外的其他地方,也许在Windows注册表中?这就是为什么即使在新的Virtualenv中重新安装Mayavi,并且使用新的Python安装也无法解决问题!
我不确定后端是如何变化的,也许我在尝试Mayavi时自己改变了它。但是,我认为这些偏好不应在Virtualenv或使用的Python安装之外持久。