Mayavi window 停止出现
Mayavi window stop showing up
我一直在 python 3.5 和 windows 10 机器上使用 mayavi。今天我正在使用 mayavi 编写一些脚本,但无缘无故(据我所知)mayavi 可视化 window 停止显示。事实上,任何 mayavi 示例都不再显示可视化 window。脚本会在 mlab.show() 上等待,但不会显示任何内容。
我已经尝试了以下但它仍然没有显示可视化 window(每次都在等待 mlab.show() 命令):
- 重启机器再试。
- pip install --mayavi、vtk 和 pyQt4 升级,然后重试。
- 我创建了一个新的 virtualenv 并安装了 numpy、pyQt4、vtk、mayavi,然后重试。
- I 运行 boy.py 示例 mlab.show(stop=True)。 stop=True 显示一个 window 和一个按钮 "stop interaction" 来完成事件循环。我看到这个 window 但没有看到可视化 window。我想也许 window 在那里但被隐藏了。我发现 WinLister 允许您显示所有 windows。我看到最后打开的windows是两个QWidget,一个是给window带关闭按钮的,显示可见,一个显示不可见。我将 window 切换为可见,我看到一个 window 可能是 mayavi 可视化 window 但它全是空白的。
- 如果我单步执行对 mlab.show() 的调用,我会看到它最终转到 site-packages/pyface/utils/guisupport.py 中的函数 start_event_loop_qt4() 并在调用中无限期等待app.exec_(),没有其他事情发生。
- 我安装了一个新的Python 3.5.2,创建一个新的虚拟环境并安装了numpy、pyQt4、vtk、mayavi,然后再试一次,同样的问题。
- 我去了另一台机器并安装了 numpy、pyQt4、vtk、mayavi,这些示例运行良好(只是检查我没有发疯)。
可能不相关,但在 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 安装之外持久存在。
我一直在 python 3.5 和 windows 10 机器上使用 mayavi。今天我正在使用 mayavi 编写一些脚本,但无缘无故(据我所知)mayavi 可视化 window 停止显示。事实上,任何 mayavi 示例都不再显示可视化 window。脚本会在 mlab.show() 上等待,但不会显示任何内容。
我已经尝试了以下但它仍然没有显示可视化 window(每次都在等待 mlab.show() 命令):
- 重启机器再试。
- pip install --mayavi、vtk 和 pyQt4 升级,然后重试。
- 我创建了一个新的 virtualenv 并安装了 numpy、pyQt4、vtk、mayavi,然后重试。
- I 运行 boy.py 示例 mlab.show(stop=True)。 stop=True 显示一个 window 和一个按钮 "stop interaction" 来完成事件循环。我看到这个 window 但没有看到可视化 window。我想也许 window 在那里但被隐藏了。我发现 WinLister 允许您显示所有 windows。我看到最后打开的windows是两个QWidget,一个是给window带关闭按钮的,显示可见,一个显示不可见。我将 window 切换为可见,我看到一个 window 可能是 mayavi 可视化 window 但它全是空白的。
- 如果我单步执行对 mlab.show() 的调用,我会看到它最终转到 site-packages/pyface/utils/guisupport.py 中的函数 start_event_loop_qt4() 并在调用中无限期等待app.exec_(),没有其他事情发生。
- 我安装了一个新的Python 3.5.2,创建一个新的虚拟环境并安装了numpy、pyQt4、vtk、mayavi,然后再试一次,同样的问题。
- 我去了另一台机器并安装了 numpy、pyQt4、vtk、mayavi,这些示例运行良好(只是检查我没有发疯)。
可能不相关,但在 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 安装之外持久存在。