Re: How to make a Button inside Manipulate?
- To: mathgroup at smc.vnet.net
- Subject: [mg81079] Re: How to make a Button inside Manipulate?
- From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
- Date: Mon, 10 Sep 2007 18:59:59 -0400 (EDT)
- Organization: Uni Leipzig
- References: <fc0i23$c32$1@smc.vnet.net>
- Reply-to: kuska at informatik.uni-leipzig.de
Hi,
Manipulate[
DynamicModule[{i = 0},
Dynamic@ Plot[
Sin[2 Pi*\[Omega]*x], {x, 0, 1},
PlotStyle -> {Switch[i,
0, RGBColor[0, 0, 0],
1, RGBColor[1, 0, 0],
2, RGBColor[0, 1, 0],
3, RGBColor[0, 0, 1]
]},
Epilog ->
Inset[Button["Press ..", i = Mod[i + 1, 4]], {0.8, 0.8}]
]], {\[Omega], 1, 4}
]
Regards
Jens
Nasser Abbasi wrote:
> "Nasser Abbasi" <nma at 12000.org> wrote in message news:...
>> The basic problem I have is that I want to have a button, in which it is
>> in a fixed location, and only when clicked will the Manipulate
>> 'expression' gets evaluated. The reason I want to do this, is that now I
>> have number of controls, and I do not want the function called everytime I
>> adjust one control, because I might have few to adjust before I am ready.
>> So I want a way to adjust/set the control to some values, and only then
>> tell manipulate to call the function with the current set of values in the
>> control.
>>
>> So, I figured I make a button, which I click on when I am ready to do
>> this.
>>
>> This is the first solution I came up with, using a flag
>>
>> ---------------- code------
>> Remove["Global`*"]
>> flag = True;
>> foo[x_] := Text[x]
>> res = 0;
>> m = Manipulate[If[flag, {flag = False; res = foo[x]}, res], {x, 0, 10}];
>> Column[{m, Button["Press ...", {flag = True; m}]}]
>> ----- end code ------------------
>>
>> The problem with the above is that the button is floating. So if foo[]
>> generates large output, the button will move lower. I wanted the button to
>> be fixed, above the controls themselves used by Manipulate.
>>
>> It sounds simple, but I have no idea how to do it. I looked at 2 examples
>> in demonstration which uses buttons, but the code is too complicated for
>> me to see the pattern.
>>
>> I tried this:
>>
>> foo[x_] := Module[{}, Print["in foo x=", x]; Text[x]]
>>
>> Manipulate[ Button["press to call foo...", foo[x]], {x, 0, 1}]
>>
>> The problem with the above is that the button goes in the place where the
>> output from foo[] is supposed to go. I know foo[] is getting called OK,
>> with the updated x values, but the button is in the way for the any
>> graphics output to be displayed from foo[].
>>
>> is there a simple solution to this?
>>
>> thanks,
>> Nasser
>>
>>
>
> I found a way! The trick was to use a Button as a pure function inside
> Manipulate
>
> foo[x_] := Text[x]
>
> Manipulate[If[doIt, {doIt = False; res = foo[x]}, res], {x, 0, 1},
> {{doIt, True, ""}, Button["RUN", doIt = True] & }
> ]
>
> I am a happy man now, I got my button where I want it :)
>
> Nasser
>
>