有时最好为调色板(按钮)设置一些初始化代码。例如,它可以定义调色板按钮使用的一些函数。
为调色板定义/运行初始化代码的最简单方法是什么?
CreatePalette
等等。)答案 0 :(得分:10)
关注Dynamic
是一个问题的可见性,你是对的。无论任何单个单元格的可见性如何,绝对保证评估Dynamic
表达式的方法是使用NotebookDynamicExpression
。这是一个示例,说明NotebookDynamicExpression
在Dynamic
失败时工作,因为它隐藏在一个封闭的单元格组中:
cell1 = First @ MakeBoxes[
TextCell["Click to open", "Title",
CellMargins -> 0, System`WholeCellGroupOpener -> True],
StandardForm];
cell2 = First @ MakeBoxes[
ExpressionCell[DynamicWrapper["hidden cell", Print["DynamicWrapper"]]],
StandardForm];
CreatePalette[
Notebook[{Cell[CellGroupData[{cell1, cell2}, Closed]]},
NotebookDynamicExpression :>
Dynamic[Refresh[Print["NotebookDynamicExpression"], None]]]]
评估时,请注意Dynamic
中的NotebookDynamicExpression
会立即评估。在您打开单元格组之前,DynamicWrapper
永远不会评估,您可以通过单击“单击以打开”文本来执行此操作。
在此示例中,顺便提一下,请注意我将NotebookDynamicExpression
与Refresh
包裹在一起。函数Refresh[#, None]&
将确保代码仅评估一次 - 首次打开笔记本时。否则,代码将遵循Dynamic
的标准属性,并在任何依赖项发生更改时进行评估。
NotebookDynamicExpression
自v6以来一直存在,但仅在v8中记录。还记录了其相关堂兄CellDynamicExpression
和FrontEndDynamicExpression
。
答案 1 :(得分:4)
具有DynamicBox
的{{1}}能够执行基本功能。您可以调整调色板的大小,使对象不可见,并且它仍然可以运行。
这是一个小样本调色板的代码。它为Initialization
设置了一个值。活动代码用空格偏移。
var