MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Dynamic GUI problem III.

  • To: mathgroup at smc.vnet.net
  • Subject: [mg89501] Re: [mg89382] Dynamic GUI problem III.
  • From: John Fultz <jfultz at wolfram.com>
  • Date: Wed, 11 Jun 2008 03:17:30 -0400 (EDT)
  • Reply-to: jfultz at wolfram.com

On Sun, 8 Jun 2008 02:30:01 -0400 (EDT), zac wrote:
> ... and again an unexpected behaviour:
>
> h = {5, 4, 3, 2, 1};
> n = 2;
> Slider[Dynamic[n], {0, 5, 1}]
> a = Dynamic[Take[h, n]];
> TogglerBar[Dynamic[b], a]
>
> TogglerBar is not evaluated at end. Any idea?
> Istvan

There are some limitations in the controls about where you can put a
Dynamic...especially in controls like TogglerBar for the argument that provides
a list of choices.  The limitation is easy to work around, though, by wrapping
the control itself in dynamic.  In your example, it would be this...

h = {5, 4, 3, 2, 1};
n = 2;
Slider[Dynamic[n], {0, 5, 1}]
Dynamic[TogglerBar[Dynamic[b], Take[h, n]]]


> another GUI related question.
> How to save a list of dynamic values into one variable after allowing
> the user to input them through e.g. separate sliders, when the actual
> length of the list (and number of sliders) is not determined
> preceedingly (here it is 3, but say it can change)?
>
> n = 3;
> a = Table[RandomReal[], {n}];
> x = Table[Slider[a[[i]], ImageSize -> 50], {i, n}]
> Dynamic[Setting[x]]
>
> The last line of code clearly won't work, since all sliders were
> called without any dynamic content.
> Any suggestions?
>
> Istvan Zachar

Similarly, here, you can wrap the Dynamic around the entire third line (not
around the right-hand side of the =, or else you'll change how x is assigned).
Also, there's a mistake here in that the resulting value of the Slider doesn't
get assigned to a[[i]] because no Dynamic is wrapped around a[[i]].  But you
can't just wrap Dynamic around it because Dynamic doesn't evaluate its
arguments, and you need some way to plug in the explicit values of i without
fully evaluating a[[i]].  Here's one way to do your example...

n = 3;
a = Table[RandomReal[], {n}];
x = Dynamic[
  Table[With[{i = i}, Slider[Dynamic[a[[i]]], ImageSize -> 50]], {i,
    n}]]
Dynamic[Setting[x]]

and to confirm that it works, subsequently evaluate...

AppendTo[a, RandomReal[]];
n = 4;

If you haven't already, you should completely read and work through all of the
examples in the following tutorials in the help system (just type these into the
search field of the help system)...

tutorial/IntroductionToDynamic
tutorial/AdvancedDynamicFunctionality

Sincerely,

John Fultz
jfultz at wolfram.com
User Interface Group
Wolfram Research, Inc.






  • Prev by Date: Re: Transform list of numbers into pure functions using replace rule
  • Next by Date: Re: Adding markers on the surface of a Plot3D?
  • Previous by thread: Re: Dynamic GUI problem III.
  • Next by thread: Re: Dynamic GUI problem III.