8

場合によっては、(ボタンの) パレットの初期化コードが必要になることがあります。たとえば、パレット ボタンで使用されるいくつかの機能を定義できます。

パレットの初期化コードを定義/実行する最も簡単で好ましい方法は何ですか?

  • 初期化は、パレットがロードされたとき、または任意のボタンが初めて押されたときに実行されます (考えられる問題:パレットがロードされた後にカーネルが再起動された場合はどうなりますか?)
  • 定義は何らかの方法でローカライズする必要があります (つまり、独自のコンテキストで -- 固有のノートブック コンテキストはここで役立ちますか?)
  • 可能であれば、労力を最小限に抑えたソリューションを希望します (つまり、可能な限り少ない場所にコードを追加する、追加のパッケージ ファイルを含まない自己完結型のパレット ファイルを作成する、パレット メニューまたは の既存の便利なツールを使用してパレットを作成するCreatePalette、など)。
  • (初期化コードは高速に実行されると想定できます。たとえば、定義のみで構成されています)
4

2 に答える 2

10

問題であることの可視性について心配するのは正しいですDynamicDynamic個々のセルの可視性に関係なく、式が評価されることを絶対に保証する方法は、 を使用すること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これを評価すると、 in がNotebookDynamicExpressionすぐに評価されることに注意してください。はDynamicWrapper、セル グループを開くまで評価されません。これは、[クリックして開く] テキストをクリックすることで実行できます。

ちなみに、この例では、 を でラップしていることに注意しNotebookDynamicExpressionRefreshください。この関数Refresh[#, None]&は、ノートブックが最初に開かれたときに、コードが 1 回だけ評価されるようにします。それ以外の場合、コードは の標準プロパティに従い、Dynamic依存関係のいずれかが変更されるたびに評価されます。

NotebookDynamicExpressionv6 から存在していましたが、v8 でのみ文書化されました。また、関連するいとこ、CellDynamicExpressionおよびFrontEndDynamicExpression.

于 2011-12-02T08:34:34.887 に答える
4

基本的な機能をDynamicBox備えInitializationています。オブジェクトが表示されないようにパレットのサイズを変更できますが、それでも動作します。

小さなサンプル パレットのコードを次に示します。の値を設定しますvar。アクティブなコードは空白でオフセットされます。

(* Beginning of Notebook Content *)
Notebook[{
Cell[BoxData[{
 TagBox[GridBox[{
    {
     ButtonBox["\<\"TSV\"\>",
      Appearance->Automatic,
      ButtonFunction:>None,
      Evaluator->Automatic,
      Method->"Preemptive"]},
    {
     ButtonBox["\<\"CSV\"\>",
      Appearance->Automatic,
      ButtonFunction:>None,
      Evaluator->Automatic,
      Method->"Preemptive"]},
    {
     ButtonBox["\<\"Table\"\>",
      Appearance->Automatic,
      ButtonFunction:>None,
      Evaluator->Automatic,
      Method->"Preemptive"]}
   },
   GridBoxAlignment->{"Columns" -> {{Left}}},
   GridBoxItemSize->{"Columns" -> {{Automatic}}, "Rows" -> {{Automatic}}}],
  "Column"], "\[IndentingNewLine]", 

DynamicBox[Null,
   Initialization :> ($CellContext`var = "It is done, Master.")
]

}], NotebookDefault,
 CellMargins->{{0, 0}, {0, 0}},
 CellBracketOptions->{"Color"->RGBColor[0.269993, 0.308507, 0.6]},
 CellHorizontalScrolling->True,
 PageBreakAbove->True,
 PageBreakWithin->False,
 ShowAutoStyles->True,
 LineSpacing->{1.25, 0},
 AutoItalicWords->{},
 ScriptMinSize->9,
 ShowStringCharacters->False,
 FontFamily:>CurrentValue["PanelFontFamily"],
 FontSize:>CurrentValue["PanelFontSize"]]
},
WindowSize->{55, 105},
WindowMargins->{{Automatic, 583}, {Automatic, 292}},
WindowFrame->"Palette",
WindowElements->{},
WindowFrameElements->{"CloseBox", "MinimizeBox"},
StyleDefinitions->"Palette.nb"
]
(* End of Notebook Content *)
于 2011-10-28T10:38:01.860 に答える