Как динамически изменить вид traitsui в активном окне
Я хотел бы настроить интерфейс таким образом, чтобы при прослушивании черты, интерфейс переключался между различными предопределенными View
объекты. Вот пример:
class App(Handler):
info=Instance(UIInfo)
view_type=Enum('slider_view','spinner_view')
number=Range(1,10)
message=Str('sawmill')
spinner_view=View(Item('number',editor=RangeEditor(mode='spinner',high=10, low=1)),Item('message'),Item('view_type'))
slider_view=View(Item('number',editor=RangeEditor(mode='slider',high=10, low=1)),Item('message'),Item('view_type'))
@on_trait_change('view_type')
def chg_view_type(self):
self.reconstruct()
def init_info(self,info):
self.info=info
def reconstruct(self):
self.info.ui.dispose()
self.info.object.edit_traits(view=self.view_type)
Этот код работает и делает все, что нужно, для представленного примера с игрушкой. Тем не менее, мое приложение имеет сложные редакторы (в том числе, но не обязательно SceneEditor
для сцены майави), которые уничтожают все их содержимое при утилизации. Мне интересно, есть ли более простой способ динамического изменения представления конкретного Item
или субпанель (изменяя вид Instance
это не изменится, это было бы просто прекрасно), пока окно активно, будь то простота или хитрость.
1 ответ
Если все, что вам нужно, это динамическая видимость, это должно сделать: https://github.com/enthought/traitsui/blob/master/examples/demo/Dynamic_Forms/visible_when.py