有时,最好为(按钮的)调色板设置一些初始化代码。例如,它可以定义一些调色板按钮使用的功能。
为调色板定义/运行初始化代码的最简单和更可取的方法是什么?
CreatePalette
等现有便利工具创建调色板等)最佳答案
您担心 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
.
关于wolfram-mathematica - 如何运行调色板的初始化代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7927903/