MathGroup Archive 2010

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

Search the Archive

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


  • Prev by Date: Re: Re: Initialization problem in a DynamicModule
  • Next by Date: Re: More /.{I->-1} craziness. Schools are conservative. So are [people]
  • Previous by thread: Re: Initialization problem in a DynamicModule
  • Next by thread: Re: Re: Initialization problem in a DynamicModule