DynamicModule[{x,y,…},expr]
expr 中のDynamicオブジェクトの評価すべてにおいて,記号 x, y, … の局所的なインスタンスを同じに保つオブジェクトを表す.DynamicModuleで指定された記号は,デフォルトで,Wolframシステムのセッション間でさえもその値を保持する.
DynamicModule[{x=x0,y=y0,…},expr]
x, y, … の初期値を指定する.
DynamicModule
DynamicModule[{x,y,…},expr]
expr 中のDynamicオブジェクトの評価すべてにおいて,記号 x, y, … の局所的なインスタンスを同じに保つオブジェクトを表す.DynamicModuleで指定された記号は,デフォルトで,Wolframシステムのセッション間でさえもその値を保持する.
DynamicModule[{x=x0,y=y0,…},expr]
x, y, … の初期値を指定する.
詳細とオプション
- DynamicModuleはModuleと同じように,まず expr 中の局所変数に一意的な名前を与える.続いて結果の式を評価し,このバージョンをDynamicModuleで包み込んで返す.
- ノートブックでは,この返されたバージョンがしばしば出力セル中に表示される.Manipulateからの出力がこの例である.
- 表示されているDynamicModuleの形式中でDynamicオブジェクトがインタラクティブに変更・編集された結果,局所変数の値が変化した場合,DynamicModuleオブジェクトはこれを反映するように修正される.
- DynamicModule中の局所変数の値は,Wolframシステムのセッション間で実質的に持続されるように,DynamicModuleを含むノートブックが保存されると,デフォルトで自動的に保存される.
- DynamicModuleオブジェクトを含むノートブックの一部をコピーすると,コピー中の局所変数は,同じ値から始まりはするが,もとの局所変数とは無関係になる.
- 次のオプションを使うことができる.
-
BaseStyle {} 表示オブジェクトのベーススタイル指定 Deinitialization None DynamicModuleがもはや表示できなくなったときに評価される式 DynamicModuleValues Automatic 動的に更新した変数値のデータ ExcludedContexts Automatic SaveDefinitionsから除外されるコンテキスト InheritScope False DynamicModule変数を他のDynamicModuleインスタンスに接続 IncludedContexts All SaveDefinitionsに考慮されるコンテキスト Initialization None DynamicModuleが最初に表示されたときに評価される式 SaveDefinitions False exprに関連するすべての定義を保存するかどうか SynchronousInitialization True 初期化を同期して行うかどうか UndoTrackedVariables None 変更されるとフロントエンドの取り消しメカニズムで追跡される変数 UnsavedVariables {} 値を保存すべきではない変数 - DynamicModuleがはじめて評価されると,評価の最中に局所変数の割当てがはじめて行われる.続いてInitializationオプションの設定は,それが何であれ,DynamicModuleの出力が表示されるときにのみ評価される.
- DynamicModuleオブジェクトが特定のノートブックにはじめて表示されると,局所変数の保存された値が復元され,Initializationオプションが設定されていればそれが評価される.
- UnsavedVariablesリストに含まれる変数を除き,局所変数のすべての値が保存される.記号の一般的な値はDynamicModuleの第1引数に保存される.その他の値はDynamicModuleValuesオプションの設定の中に保存される.
- DynamicModuleは属性HoldAllを持つ.
- DynamicModule構文はどのようにもネストすることができる.必要であれば内側の変数の名前が変更される.
- DynamicModuleは,語彙スコーピングを実装するスコーピング構文である.
例題
すべて開く すべて閉じる例 (1)
動的に変更される局所変数を持つSliderを作成する:
DynamicModule[{x}, {Slider[Dynamic[x]], Dynamic[x]}]スコープ (6)
DynamicModuleの変数 (3)
DynamicModuleを使って変数を局所化し,大域的な変数との衝突を防ぐ:
{Slider[Dynamic[x]], Dynamic[x]}DynamicModule[{x}, {Slider[Dynamic[x]], Dynamic[x]}]{Slider[Dynamic[x]], Dynamic[x]}%DynamicModule[{x}, {Slider[Dynamic[x]], Dynamic[x]}]%Moduleのように,局所変数に初期値を割り当てる:
DynamicModule[{a = 3, b = 2, c = 1}, {a, b, c}.x ^ Range[3]]DynamicModule[{f, p}, f[g_] := Graphics[g, ImageSize -> Tiny];{SetterBar[Dynamic[p], {Disk[] -> Disk, Rectangle[] -> Rectangle}], Dynamic[f[p]]}]DynamicModuleの状態 (3)
DynamicModuleを使って異なるWolframシステムセッション間で表示状態を保存する:
DynamicModule[{x = 1}, Slider[Dynamic[x]]]InputForm[ToBoxes[%]]Moduleは現行のWolframシステムセッションに一意的な状態しか与えない:
Module[{x = 1}, Slider[Dynamic[x]]]InputForm[ToBoxes[%]]Initializationを使ってコンテンツの表示前に式を評価する:
DynamicModule[{x = .5}, Slider[Dynamic[x]], Initialization :> (SelectionMove[EvaluationNotebook[], All, EvaluationCell];SetOptions[NotebookSelection[], CellFrame -> 1, CellFrameColor -> Hue[x]])]Initializationは局所変数の割当て後に評価される:
DynamicModule[{a = 2}, Dynamic@a, Initialization :> (a = 1)]一般化と拡張 (1)
オプション (16)
BaseStyle (1)
Deinitialization (1)
DynamicModuleValues (1)
局所的な記号の関数定義は自動的にDynamicModuleValuesに挿入される:
InputForm[DynamicModule[{c}, c[x_] := {x};c[1]]]ExcludedContexts (1)
デフォルトで,システムについて内部的な特定のコンテキストは初期化オプションには保存されない:
x := $TimeZone
DynamicModule[{x}, x, SaveDefinitions -> True]//ToBoxesExcludedContexts{}を使ってプロテクトされていないすべてのシンボルの定義を保存する:
DynamicModule[{x}, x, ExcludedContexts -> {}, SaveDefinitions -> True]//ToBoxesInheritScope (1)
親DynamicModuleから変数を継承するDynamicModuleのあるダイアログボックスを作る:
DynamicModule[{a = 1}, {Dynamic[a], Button["ダイアログ", CreateDialog[DynamicModule[{}, Button["a++", a++], InheritScope -> True]]]}]Initialization (4)
f[x_] := {x}DynamicModule[{c}, {Slider[Dynamic[c]], Dynamic[f[c]]}]Initializationを使ってコンテンツに必要な評価を保存する:
DynamicModule[{c}, {Slider[Dynamic[c]], Dynamic[g[c]]}, Initialization :> (g[x_] := {x})]DynamicModule[{c = 0.2, g},
{Slider[Dynamic[c]], Dynamic[g[c]]}, Initialization :> (g[x_] := {x})]DynamicModule[{}, 1, Initialization :> (x = 2)];DynamicModule[{}, 2, Initialization :> (y = 3)]最初のDynamicModuleはセミコロンで出力が出ないようにされているので,この割当てが実行されることは全くなかった:
{x, y}IncludedContexts (1)
SaveDefinitions (2)
f[x_] := xDynamicModule[{u = 5}, Dynamic[f[u]]]SaveDefinitionsをTrueに設定すると,外部定義が出力とともに保存されるようになる:
f[x_] := xDynamicModule[{u = 5}, Dynamic[f[u]], SaveDefinitions -> True]SynchronousInitialization (2)
デフォルトで,初期化は出力が表示される前に(同期的に)評価される:
DynamicModule[{c = 0.2, g}, {Slider[Dynamic[c]], Dynamic[g[c]]}, Initialization :> (Pause[2];g[x_] := {x})]DynamicModule[{c = 0.2}, {Slider[Dynamic[c]], Dynamic[g[c]]}, Initialization :> (Pause[2];g[x_] := {x}), SynchronousInitialization -> False]UndoTrackedVariables (1)
UnsavedVariables (1)
dm = DynamicModule[{x, y}, Column@{Slider[Dynamic[x]], Slider[Dynamic[y]], Dynamic[{x, y}]}, UnsavedVariables -> {y}];次を評価して2つのスライダーを動かし,次にCloseをクリックする:
nb = DialogInput[{dm, Button["Close", DialogReturn[NotebookGet[]]]}];次を評価する.2番目のスライダーが前の状態を記憶していないことに注意のこと:
nb = DialogInput[nb];アプリケーション (3)
DynamicModule[{a = 0, b = 0}, Deploy[Style[Panel[Grid[Transpose[{{Style["数を入力", Red], Style["別の数を入力", Red], "2数の和", "2数の差", "2数の積"}, {InputField[Dynamic[a], Number], InputField[Dynamic[b], Number], InputField[Dynamic[a + b], Enabled -> False], InputField[Dynamic[a - b], Enabled -> False], InputField[Dynamic[a b], Enabled -> False]}}], Alignment -> Right], ImageMargins -> 10], DefaultOptions -> {InputField -> {ContinuousAction -> True, FieldSize -> {{5, 30}, {1, Infinity}}}}]]]DynamicModule[{pts = {{0, 0}, {1, 1}, {2, 0}, {3, 2}}}, LocatorPane[Dynamic[pts], Dynamic[Plot[InterpolatingPolynomial[pts, x], {x, 0, 3}, PlotRange -> 3]]]]angularSlider[Dynamic[angle_]] := DynamicModule[{p = {1, 0}, angleCalc}, LocatorPane[Dynamic[p, (angleCalc@@Normalize /@ {#, p})&], Graphics[{Circle[], Arrowheads[0.15], Arrow[Dynamic[{{0, 0}, p}]]}, ImageSize -> Tiny], Appearance -> None], Initialization :> (angle = 0;angleCalc[newp_, oldp_] := (angle = angle + Abs[ArcCos[newp.oldp]]Sign[Cross[newp].(newp - oldp)];p = {Cos[angle], Sin[angle]}))]{angularSlider[Dynamic[θ]], Dynamic[θ]}DynamicModule[{θ = 0}, Grid[{{angularSlider[Dynamic[θ]], Plot[Sin[x], {x, -10, 10}, Epilog -> {PointSize[Medium], Dynamic@Point[{θ, Sin[θ]}]}]}, {ParametricPlot[{Cos[y], y}, {y, -10, 10}, AspectRatio -> 2, Epilog -> {PointSize[Medium], Dynamic@Point[{Cos[θ], θ}]}], Dynamic[θ]}}]]PolarPlotを使って螺線を示す:
DynamicModule[{θ = 0}, Grid[{{angularSlider[Dynamic[θ]], Dynamic@PolarPlot[t, {t, -Pi, θ}, ImageSize -> Tiny]}}]]特性と関係 (2)
DynamicModuleとModuleは同じように見えるが根本的に異なる:
DynamicModule[{x}, {x, Slider[Dynamic[x]], Dynamic[x]}]%この場合,どちらのスライダーも動くが,再度開かれた場合は評価されない限りどちらも動かない:
Module[{x}, {x, Slider[Dynamic[x]], Dynamic[x]}]%Manipulateは出力作成でDynamicModuleに依存する:
Manipulate[x, {x, 0, 1}]DynamicModule[{x}, {Slider[Dynamic[x]], Dynamic[x]}]考えられる問題 (2)
デフォルトで,"System`"シンボルの定義は取得されない:
x := Subscript[y, 1]
Subscript[y, 1] := 17
Options[DynamicModule[{x}, x, SaveDefinitions -> True]//ToBoxes, Initialization]ExcludedContexts{}を使ってすべてのコンテキストから定義を取得する:
Options[DynamicModule[{x}, x, SaveDefinitions -> True, ExcludedContexts -> {}]//ToBoxes, Initialization]Clear[Subscript]
y/:Subscript[y, 1] = 17
Options[DynamicModule[{x}, x, SaveDefinitions -> True]//ToBoxes, Initialization]外部で宣言されたModule変数を動的モジュールで使うとスコープが衝突する:
Module[{outer = 1}, DynamicModule[{inner = Hold[outer]}, Dynamic[ReleaseHold[inner]]]]ボックスは,カーネルが終了した後に値がなくなるリークされた一時Moduleシンボルを参照する:
ToBoxes[%, StandardForm]Withを使って完全に解決されたModuleシンボルを挿入し,ボックスによって参照されないようにする:
Module[{outer = 1}, With[{tmp = outer}, DynamicModule[{inner = Hold[tmp]}, Dynamic[ReleaseHold[tmp]]]]]ToBoxes[%, StandardForm]おもしろい例題 (2)
Expand[(DynamicModule[{x}, Slider2D[Dynamic[x]]] + 1) ^ 3]Framed@DynamicModule[{contents = {}}, EventHandler[Graphics[{PointSize[0.1], Point[Dynamic[contents = Map[If[#[[1, 2]] ≥ 0, {#[[1]] - #[[2]], #[[2]] + {0, 0.001}}, {{#[[1, 1]], 0}, {1, -0.8}#[[2]]}]&, contents];Map[First, contents]]]}, PlotRange -> {{0, 1}, {0, 1}}, ImageSize -> 80], "MouseDown" :> (AppendTo[contents, {MousePosition["Graphics"], {0, 0}}])]]動的オブジェクトを入力に使う.別の枠内をクリックして追加のボールを作る:
(% + 1) ^ 3//Expandテクニカルノート
関連するガイド
関連するワークフロー
- 自動更新される動的コンテンツをノートブックに含める ▪
- ロケータのコントロールを使う
テキスト
Wolfram Research (2007), DynamicModule, Wolfram言語関数, https://reference.wolfram.com/language/ref/DynamicModule.html (2021年に更新).
CMS
Wolfram Language. 2007. "DynamicModule." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2021. https://reference.wolfram.com/language/ref/DynamicModule.html.
APA
Wolfram Language. (2007). DynamicModule. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/DynamicModule.html
BibTeX
@misc{reference.wolfram_2026_dynamicmodule, author="Wolfram Research", title="{DynamicModule}", year="2021", howpublished="\url{https://reference.wolfram.com/language/ref/DynamicModule.html}", note=[Accessed: 08-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_dynamicmodule, organization={Wolfram Research}, title={DynamicModule}, year={2021}, url={https://reference.wolfram.com/language/ref/DynamicModule.html}, note=[Accessed: 08-September-2026]}