Mayavi window 停止出现

Mayavi window stop showing up

我一直在 python 3.5 和 windows 10 机器上使用 mayavi。今天我正在使用 mayavi 编写一些脚本,但无缘无故(据我所知)mayavi 可视化 window 停止显示。事实上,任何 mayavi 示例都不再显示可视化 window。脚本会在 mlab.show() 上等待,但不会显示任何内容。

我已经尝试了以下但它仍然没有显示可视化 window(每次都在等待 mlab.show() 命令):

可能不相关,但在 window 停止出现之前我做的最后一件事是从 mayavi 属性 window 录制脚本,我想看看什么命令对应于移动视点到某个地方。一旦我看到正在记录的命令,我就复制它们并关闭 mayavi 可视化 window 而没有停止记录。从那一刻起,我遇到了所描述的问题。

更新:

我一直在工作的机器和不工作的机器上调试 boy.py 示例(两台机器具有相同的软件配置),我发现了他们的第一点执行偏差。

创建图形时:

mlab.figure(fgcolor=(0, 0, 0), bgcolor=(1, 1, 1))

能用的机器打开一个空的vtk/mayaviwindow,不能用的机器什么都打开

我单步执行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)

查看器是一个mayavi.core.null_engine.DummyViewer对象, 在它工作的机器中,查看器是一个 mayavi.core.ui.mayavi_scene.MayaviViewer object

我还发现传递给 self.scene_factory 的 factory_kwargs 在机器中是 {} 它不不工作,它是 {'size': (400,350)} 在它工作的机器中。

我正在尝试了解 scene_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':

后端是 '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显示了一个数据可视化工具。如果我们 select 菜单选项 Tools/Preferences/Mayavi/Mlab 字段 backend 设置为 'test'。我将其更改为 'auto' 然后 mayavi boy.py 示例再次开始工作!

一件令人困惑的事情是,然后我回到原来的 Python 3.5 安装和我原来的 virtualenv。我使用 运行 boy.py 示例,无需对该安装执行任何操作即可运行。所以我怀疑这些设置存储在 python 或 virtualenv 文件夹之外的其他地方,也许在 windows 注册表中?这就是为什么重新安装 mayavi,即使是在新的 virtualenv 和新的 python 安装也没有解决问题!

我不确定后端是如何改变的,也许我在试验mayavi 时自己改变了它。但是,我认为这些首选项不应该在 virtualenv 或正在使用的 python 安装之外持久存在。