traitsui Range()滑块输入框的致命错误

时间:2018-02-12 17:16:51

标签: slider mayavi traitsui

以下是MayaVI网站上使用滑块的一些示例代码。尝试在滑块范围之外输入一个致命错误

code: 400,
errors: 
 [ { domain: 'global',
     reason: 'required',
     message: 'The permission type field is required.',
     locationType: 'other',
     location: 'permission.type' } ]

如何改进此代码以禁止用户触发此致命错误?我认为可以停用输入框的行(例如from numpy import arange, pi, cos, sin from traits.api import HasTraits, Range, Instance, \ on_trait_change from traitsui.api import View, Item, Group from mayavi.core.api import PipelineBase from mayavi.core.ui.api import MayaviScene, SceneEditor, \ MlabSceneModel dphi = pi/1000. phi = arange(0.0, 2*pi + 0.5*dphi, dphi, 'd') def curve(n_mer, n_long): mu = phi*n_mer x = cos(mu) * (1 + cos(n_long * mu/n_mer)*0.5) y = sin(mu) * (1 + cos(n_long * mu/n_mer)*0.5) z = 0.5 * sin(n_long*mu/n_mer) t = sin(mu) return x, y, z, t class MyModel(HasTraits): n_meridional = Range(0, 30, 6, )#mode='spinner') n_longitudinal = Range(0, 30, 11, )#mode='spinner') scene = Instance(MlabSceneModel, ()) plot = Instance(PipelineBase) # When the scene is activated, or when the parameters are changed, we # update the plot. @on_trait_change('n_meridional,n_longitudinal,scene.activated') def update_plot(self): x, y, z, t = curve(self.n_meridional, self.n_longitudinal) if self.plot is None: self.plot = self.scene.mlab.plot3d(x, y, z, t, tube_radius=0.025, colormap='Spectral') else: self.plot.mlab_source.set(x=x, y=y, z=z, scalars=t) # The layout of the dialog created view = View(Item('scene', editor=SceneEditor(scene_class=MayaviScene), height=250, width=300, show_label=False), Group( '_', 'n_meridional', 'n_longitudinal', ), resizable=True, ) my_model = MyModel() my_model.configure_traits() )可以工作,或者完全删除 - 但我不确定如何在traitsui方法中实现它。

1 个答案:

答案 0 :(得分:1)

经过大量的试验和错误,这似乎是Traitsui的默认Range()模式中的一个错误,至少对于Mac OS X(我正在运行High Sierra,10.13.3)。

解决方案是将默认mode更改为外观和行为相同的内容,减去程序崩溃:

n_meridional = Range(0, 30, 6, mode='slider')