首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mayavi窗口停止出现

Mayavi窗口停止出现
EN

Stack Overflow用户
提问于 2016-12-05 22:12:22
回答 1查看 1.5K关注 0票数 2

我已经在python3.5和windows 10机器上使用了mayavi。今天,我正在使用mayavi编写一些脚本,而且没有任何原因(据我所知),mayavi可视化窗口停止了显示。事实上,任何mayavi示例都不再显示可视化窗口。脚本将在mlab.show()上等待,但不会显示任何内容。

我尝试了以下方法,但它仍然没有显示可视化窗口(每次只是在mlab.show()命令下等待):

  • 重新启动机器,再试一次。
  • pip安装--升级到mayavi,vtk和pyQt4,然后再试一次。
  • 我创建了一个新的虚拟主机,然后安装numpy、pyQt4、vtk、mayavi,然后再试一次。
  • 我使用boy.py (mlab.show,stop=True)运行这个示例。stop=True显示一个带有“停止交互”按钮的窗口,以完成事件循环。我看到了这个窗口,但没有看到可视化窗口。我想也许窗户就在那里,但却隐藏着。我找到了WinLister,它允许你显示所有的窗口。我可以看到,最后打开的窗口是两个QWidget,一个用于带有关闭按钮的窗口,它显示为可见,另一个显示为不可见。我把那个窗口切换到可视窗口,我看到一个可能是mayavi可视化窗口的窗口,但它都是空白的。
  • 如果我逐步完成对mlab.show()的调用,我看到它最终会转到站点-packages/pyface/utils/guisupport.py中的函数start_event_loop_qt4(),并且它在对app.exec_()的调用中无限期地等待,其他任何事情都不会发生。
  • 我安装了一个新的Python3.5.2,创建了一个新的虚拟环境,并安装了numpy、pyQt4、vtk、mayavi,然后再试一次,同样的问题。
  • 我去了另一台机器,安装了numpy、pyQt4、vtk、mayavi,这些例子运行得很好(只是检查一下我没有发疯)。

可能与此无关,但在窗口停止显示之前,我所做的最后一件事是从mayavi属性窗口录制脚本,我想看看哪些命令对应于将视点移动到某个位置。一旦我看到命令被记录下来,我就复制它们并关闭mayavi可视化窗口而不停止记录。从那一刻起,我就经历了所描述的问题。

更新:

我已经在运行的机器上调试了boy.py示例,在没有调试的机器上(这两台机器都有相同的软件配置),我已经找到了它们的执行偏离的第一点。

创建图形时:

代码语言:javascript
运行
复制
mlab.figure(fgcolor=(0, 0, 0), bgcolor=(1, 1, 1))

工作的机器打开一个空的vtk/mayavi窗口,不工作的机器不会打开任何东西。

我逐步完成了图形函数(在不能工作的机器中),并发现在执行堆栈的此时,它开始偏离:

代码语言:javascript
运行
复制
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是如何工作的,但这是一个有点令人畏惧的任务。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-10 21:10:54

我找到了解决办法!

通过遍历mlab.figure()的代码,我发现在执行堆栈的此时:

代码语言:javascript
运行
复制
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”,它实例化了

代码语言:javascript
运行
复制
engine = NullEngine(name='Null Mlab Engine')

在运行后端的机器中,后端是“auto”,它实例化了

代码语言:javascript
运行
复制
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安装之外持久存在。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40984287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档