[IPython-dev] Quick Question about Widgets

Nicholas Bollweg nick.bollweg at gmail.com
Mon Oct 6 16:29:32 EDT 2014

Sorry; haven't had much time to tinker on widget stuff much outside of
directly work-related stuff.

The file stuff sounds like it's getting pretty complicated! Maybe you could
add another layer outside of the GUI, like a Workspace, and have all of the
file-relevant stuff handled there. Then, when you change datasets, you just
re-roll the whole GUI related to that specific dataset.

However, based on what you have done... first, you could instrument the
dataset as a traitlets.Instance: (*caveat: the below things are not tested!*

class Spectrogram(HTML):
>     ...
>     ts = Instance(klass=WhateverTsIs)

Then you can use the nice events to react to that being switched to a new
instance on a per-linked-widget basis:

class Spectroscopy(Box):
>     ...
>     def _sampling(self):
>         ...
>         start = FloatSlider(
>             description="Slicing Start Value",
>             value=self.graph.ts.index[0],
>             min=self.graph.ts.index.min(),
>             max=self.graph.ts.index.max()
>         )
>         ...
>         def _ts_changed(name, old, new):
>             start.value = self.graph.ts.index[0]
>             start.min = self.graph.ts.index.min()
>             start.max = self.graph.ts.index.max()
>         self.graph.on_trait_changed(_ts_changed, "ts")

Now, you'll probably still have the problem of whether you are actually
ready to redraw as all those controls re-initialize... the easiest thing
would probably be to just add some more error handling to Spectrogram.draw
to catch these errors, and let it fail if you are pretty confident that it
will work once the inputs are all valid. Or, you could set a time window
during which you don't try to redraw. Not sure what would work out best.

Maybe this helps?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ipython-dev/attachments/20141006/98015e8f/attachment.html>

More information about the IPython-dev mailing list