Re: Re: Initialization problem in a DynamicModule
- To: mathgroup at smc.vnet.net
- Subject: [mg106682] Re: [mg106664] Re: Initialization problem in a DynamicModule
- From: DrMajorBob <btreat1 at austin.rr.com>
- Date: Thu, 21 Jan 2010 04:51:12 -0500 (EST)
- References: <hj40pp$sgd$1@smc.vnet.net> <201001201150.GAA09317@smc.vnet.net>
- Reply-to: drmajorbob at yahoo.com
> As you can see, DynamicModule evaluates its variables, even though I > wouldn't expect it to do it. Is there anything about it in the > documentation? Look at, for instance, the first two examples on the Help page for Initialization: Specify an expression to be evaluated before displaying Dynamic: Dynamic[c[1],Initialization:>(c[x_]:={x})] {1} DynamicModule: DynamicModule[{c},Dynamic[c[1]],Initialization:>(c[x_]:={x})] {1} Bobby On Wed, 20 Jan 2010 05:50:36 -0600, Norbert P. <bertapozar at gmail.com> wrote: > Hi Istv=E1n, > > this is one of the weird behaviors of DynamicModule. The dynamic > functionality is awesome, but I find it very hard to create a more > involved interface due to the unpredictability of the components. More > involved means anything more than the simple demos from > demonstrations.wolfram.com. Even though the documentation is quite > extensive, many details are missing. > > I was staring at your code for quite a while =) It turns out that it > still contains a lot of clutter. You could've stripped most of it and > you'd get: > > In[1]:= > DynamicModule[{something}, > 1, > Initialization:>(something:=(Print["you should never see this!"]);) > ] > Out[1]= 1 > During evaluation of In[1]:= you should never see this! > > As you can see, DynamicModule evaluates its variables, even though I > wouldn't expect it to do it. Is there anything about it in the > documentation? > > The solution for you is to define functions not as OwnValues as above, > but as DownValues, as in: > > In[2]:= DynamicModule[{something}, > 1, > Initialization:>(something[]:=(Print["you should never see > this!"]);) > ] > Out[2]= 1 > > In this case, something doesn't get evaluated and it works the way you > expect. So try > > Panel@DynamicModule[{x,y,assign,initialize},Grid[{{"","A","B"},{"w/ > assign:",RadioButton[Dynamic[x,(x=#;assign[])&],True],RadioButton > [Dynamic[x,(x=#;assign[])&],False]},{"w/o assign:",RadioButton > [Dynamic@x,True],RadioButton[Dynamic@x,False]}, > {"value:",Dynamic@x}},Dividers->{False, > {False,True,True,True,False}},Alignment->{Left, > {Center}}],Initialization:>(assign[]:=(y=x);(*further variables to > update*)initialize[]:=(x=True;assign[]);(*initialization function*) > initialize[];)] > > For some reason, DynamicModule evaluates its variables whenever I > assign to x as in the following code by clicking the first radio > button (it evaluates it twice!!), but not when I press the second: > > DynamicModule[{x=False,something,i=0}, > {RadioButton[Dynamic[x,(x=#)&],True],RadioButton[Dynamic > [x],False],Dynamic[i]},Initialization:>(something:=(Print["init",i+ > +]))] > > It would be great to hear from someone who knows more about the > internal working of DynamicModule. My all-time favourite bug is: > > In[3]:= DynamicModule[{x=Sequence[]},1] > During evaluation of In[3]:= Transpose::nmtx: The first two levels of > the one-dimensional list {{Hold[x]},{}} cannot be transposed. >> > Out[3]= Manipulate`Dump`eDynamicModule[Transpose > [Manipulate`Dump`heldsetting[{{Hold[x]},{}}]],1,DynamicModuleValues:> > {}] > > Compare that to ordinary module: > > In[4]:= Module[{x=Sequence[]},1] > Out[4]= 1 > > I discovered it a couple days after buying Mathematica 6, still > excited about the new dynamic functionality. That was pretty > disappointing;) > > Best, > Norbert > > On Jan 19, 2:16 am, Istv=E1n <replicator... at gmail.com> wrote: >> Dear Group, >> >> I have some problem with a complex interface inside a DynamicModule. >> This is a toy version of the program, which can fully reproduce the >> malfunction: >> >> Panel@DynamicModule[ >> {x, y, assign, initialize}, >> >> Grid[{ >> {"", "A", "B"}, >> {"w/ assign:", RadioButton[Dynamic[x, (x = #; assign) &], True]= > , >> RadioButton[Dynamic[x, (x = #; assign) &], False]}, >> {"w/o assign:", RadioButton[Dynamic@x, True], >> RadioButton[Dynamic@x, False]}, >> {"value:", Dynamic@x} >> }, Dividers -> {False, {False, True, True, True, False}}, >> Alignment -> {Left, {Center}}], >> >> Initialization :> ( >> assign := (y = x);(* further variables to update *) >> initialize := (x = True; assign); (* initialization function = > *) >> initialize; >> ) >> ] >> >> Now for some reason, the radiobuttons do not function as intended (at >> least as I want). >> The following clicking orders do not work: >> >> [w/ + B] then [w/ + A] >> [w/o + B] then [w/ + A] >> >> these work correctly: >> >> [w/ + B] then [w/o + A] >> [w/o + B] then [w/o + A] >> >> I guess, that the problem is with the "initialize" (or the "assign") >> function. Any idea? >> Thanks in advance >> >> Istv=E1n > > -- DrMajorBob at yahoo.com
- References:
- Re: Initialization problem in a DynamicModule
- From: "Norbert P." <bertapozar@gmail.com>
- Re: Initialization problem in a DynamicModule