我正在尝试在TraitsUI中创建一个包含两个Mayavi图形的GUI。我已经根据Mayavi文档中的多个引擎示例实现了这些数字。
但是,当我向其中一个图形添加颜色条并运行 GUI 脚本时,除了所需的 TraitsUI 窗口外,它有时会打开一个空白的 Mayavi 场景编辑器窗口。这个空白窗口并不总是出现,在重新启动 python 内核后的第一次运行时永远不会出现,有时只有在连续运行脚本几次并关闭每次出现的窗口之后才会出现。
运行下面大幅缩减的代码会产生相同的行为,删除mlab.colorbar(s)
行可以解决问题。如何在不打开空白窗口的情况下获得颜色条?对于曲面图,似乎没有一种明显的方法可以将颜色条分配给特定图形。我在Windows 7上运行Python 3.5(但在Ubuntu上遇到了同样的问题(。
from traits.api import HasTraits, Instance, on_trait_change
from traitsui.api import View, Item
import numpy as np
from mayavi.core.api import Engine
from mayavi.core.ui.api import SceneEditor, MlabSceneModel
from mayavi import mlab
#Generate a test surface to display
def test_surf():
x, y = np.mgrid[-7.:7.05:0.1, -5.:5.05:0.05]
z = np.sin(x + y) + np.sin(2 * x - y) + np.cos(3 * x + 4 * y)
return x, y, z
class MyApp(HasTraits):
#Create a mayavi scene with a specified engine
engine = Instance(Engine, ())
scene = Instance(MlabSceneModel)
def _scene_default(self):
self.engine.start()
return MlabSceneModel(engine=self.engine)
#Plot the surface when the scene is activated
@on_trait_change('scene.activated')
def populate_scene(self):
s = mlab.surf(*test_surf(), figure=self.scene.mayavi_scene)
mlab.colorbar(s)
view = View(Item('scene', editor=SceneEditor()))
if __name__ == '__main__':
MyApp().configure_traits()
您可以添加关闭/退出您调用的窗口的内容。
例如,您可以使用函数mayavi.mlab.close
关闭图形self.scene.mayavi_scene
。