wolfram-mathematica - 如何运行调色板的初始化代码?

标签 wolfram-mathematica initialization mathematica-frontend

有时,最好为(按钮的)调色板设置一些初始化代码。例如,它可以定义一些调色板按钮使用的功能。

为调色板定义/运行初始化代码的最简单和更可取的方法是什么?

  • 初始化可以在加载调色板时或第一次按下任何按钮时运行(可能的问题:如果在加载调色板后重新启动内核怎么办?)
  • 定义应该以某种方式本地化(即在它们自己的上下文中 - 独特的笔记本上下文在这里有帮助吗?)
  • 如果可能的话,我更喜欢最简单的解决方案(即在尽可能少的地方添加额外的代码、没有额外包文件的自包含调色板文件、使用调色板菜单或 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]]]]
    

    当您对此进行评估时,请注意 DynamicNotebookDynamicExpression立即评估。 DynamicWrapper在您打开单元格组之前永远不会评估,您可以通过单击“单击以打开”文本来执行此操作。

    在这个例子中,请注意我包装了 NotebookDynamicExpressionRefresh .函数Refresh[#, None]&将确保代码只计算一次——当笔记本第一次打开时。否则,代码将遵守 Dynamic 的标准属性。并在任何依赖项更改时进行评估。
    NotebookDynamicExpression自 v6 以来一直存在,但仅在 v8 中记录。还记录了它的相关表亲,CellDynamicExpressionFrontEndDynamicExpression .

    关于wolfram-mathematica - 如何运行调色板的初始化代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7927903/

    相关文章:

    wolfram-mathematica - 如何在Mathematica中进行函数替换

    python - python 中的 ode 集成与 mathematica 结果

    c# - 急切的静态构造函数

    wolfram-mathematica - TableForm 的 TableHeadings 与左对齐但表格的内容与右对齐

    wolfram-mathematica - Mathematica 7 是否支持惰性求值?

    c# - 如何在 C# 中复制数组的值 n 次

    c++ - 将变量初始化为空

    wolfram-mathematica - 前端对表达式的转换

    wolfram-mathematica - Mathematica 中的鼠标悬停和动态

    wolfram-mathematica - 简化 Mathematica 中的绝对值