Re: Initialization cell and button
- To: mathgroup at smc.vnet.net
- Subject: [mg70107] Re: Initialization cell and button
- From: Markus Huber <mhla at gmx.at>
- Date: Wed, 4 Oct 2006 05:58:44 -0400 (EDT)
- References: <eftdnh$6co$1@smc.vnet.net>
Thank you, the version with the InterpretationBox will work fine for me. Regards, Markus Ingolf Dahl wrote: > Markus, > You must remember that the FrontEnd is almost, but not exactly, as smart as > the bomb in the computer game "Starship Titanic" by Douglas Adams... When > the "EvaluateInitialization" command is executed, the initialization cells > are not inserted into the program flow and evaluated immediately; they just > are put onto the evaluation stack, to be evaluated after the button function > as such. You thus must put the print command even later on the evaluation > stack to obtain the desired functionality. The easiest way is of course to > include a print command as the last initialization cell, but that solution > is probably too simple for your purposes (?). Another solution is to hide a > print command inside the button cell. Execute the following command to > obtain such a button: > > > NotebookWrite[InputNotebook[], Cell[BoxData[InterpretationBox[ButtonBox["a", > ButtonFunction:> > FrontEndExecute[CompoundExpression[FrontEndToken["EvaluateInitialization"], > SelectionMove[ButtonNotebook[],All,ButtonCell], > FrontEndToken["EvaluateCells"]]], ButtonEvaluator->None, Active->True, > ButtonFrame->"DialogBox"], Print@a]],"Input"]] > > (You have to modify the button if you want to generate a palette from it.) > > Another approach to put commands onto the evaluation stack is to let the > ButtonFunction create a scrap notebook, write the commands there together > with a command that closes the same scrap notebook, and then use > SelectionEvaluate to evaluate these commands. But in this case we then would > have to redirect the output of Print to be able to see anything. > > Best regards > > Ingolf Dahl > > > >> -----Original Message----- >> From: Markus Huber [mailto:mhla at gmx.at] To: mathgroup at smc.vnet.net >> Subject: [mg70107] Initialization cell and button >> >> >> I've got the following simplified problem with a button: >> >> Create an initialization cell which contains a=1; >> >> Create a button with >> >> Button["a", Active -> True, >> ButtonFunction :> (FrontEndExecute[ >> FrontEndToken["EvaluateInitialization"]]; >> Print@a), ButtonEvaluator -> Automatic] // DisplayForm >> >> but say no, if Mathematica asks if to evaluate the >> initialization cells in the NB. >> >> Now press the button . >> >> In my opinion the result should be the printout of 1. Instead >> M prints a. If you press the button again it prints correctly 1. >> >> Why is M not aware of the value of a when evaluating the >> Print function although the initialization cells should have >> been evaluated already? >> >> >> Regards, >> Markus Huber >> > >