Dynamic[expr]
expr の動的に更新された現在値を表示するオブジェクトを表す.Dynamic[expr]の表示形式がインタラクティブに変更されたり編集されたりする場合は,割当て expr=val は表示形式に対応する新しい値 val を expr に与えるように行われる.
Dynamic[expr,f]
val のインタラクティブな変更や編集の間,f[val,expr]を継続的に評価する.
Dynamic[expr,{f,fend}]
インタラクティブな変更や編集が終了してから fend[val,expr]も評価する.
Dynamic[expr,{fstart,f,fend}]
インタラクティブな変更や編集が開始してから fstart[val,expr]も評価する.
Dynamic
Dynamic[expr]
expr の動的に更新された現在値を表示するオブジェクトを表す.Dynamic[expr]の表示形式がインタラクティブに変更されたり編集されたりする場合は,割当て expr=val は表示形式に対応する新しい値 val を expr に与えるように行われる.
Dynamic[expr,f]
val のインタラクティブな変更や編集の間,f[val,expr]を継続的に評価する.
Dynamic[expr,{f,fend}]
インタラクティブな変更や編集が終了してから fend[val,expr]も評価する.
Dynamic[expr,{fstart,f,fend}]
インタラクティブな変更や編集が開始してから fstart[val,expr]も評価する.
詳細とオプション
- Dynamic[expr]は直接表示される式として現れるだけではなく,例えばグラフィックスプリミティブあるいはスライダーのようなオブジェクトの座標として,またオプション設定としても現れることができる.
- インタラクティブな操作を通して expr に値を割り当てる際に使用されるときのDynamic[expr]中の式は,記号 x,オブジェクト x[i],部分e[[i]],あるいはリスト{x,y,…}であることが多い.
- 例えばグラフィックスでは,Point[Dynamic[{x,y}]]は x と y の現行値で与えられるために位置が動的に更新される点を表す.点がインタラクティブに移動されるたびに,{x,y}={valx,valy}の形の割当てが行われる.Point[Dynamic[{x,y}]]はインラタクティブに移動できる.Dynamic[Point[{x,y}]]はインタラクティブには移動できない.
- Dynamic[expr]は,値が必要になり,それが依存している記号の任意のタイプの値が変更されたと判断する場合はいつでも expr を評価する.
- RefreshあるいはClockオブジェクトがDynamic[expr]中の式の評価に現れると,expr は連続的に再評価される.
- Dynamicには属性HoldFirstがあるので,expr は表示のために値が必要となるまで評価されない.
- Dynamic[expr]はDynamic[expr,(expr=#)&]と等価である.
- Dynamic[expr,f]は,f[val,expr]の評価によるとき以外は,インタラクティブな操作が expr を変更しないようにする.
- Dynamic[expr,None]で表されるオブジェクトは,インタラクティブには変更できないが,何らかの理由で expr の値が変更されると変更される.
- Dynamic[expr,Temporary]では,表示されたオブジェクトの形式がインタラクティブな操作で変更できるが,操作が完了したときでなければ更新された値の expr への割当ては行われない.
- インタラクティブなマウス操作では,Dynamic[expr,{fstart,f,fend}]は一般に,マウスが押されると fstart[val,expr]を1度評価し,マウスが動かされるたびに f[val,expr]を評価し,マウスが放されると fend[val,expr]を1度評価する.
- マウスが動かされなければ,fstart,f,fend は厳密に1度ずつ評価される.
- f[val,expr]は常に,fstart[val,expr]の評価の直後に1度評価され,最後に評価されたときの val の値が,常に fend[val,expr]におけるものと同じになる.
- Dynamicオブジェクトに影響を与えるインタラクティブな操作には,グラフィックス内あるいはSlider等のオブジェクト内で要素をドラッグしたり,InputFieldのようなオブジェクト中のフィールドを編集したりすることが含まれる.
- fstart,f,fend の関数は次のものでもよい.
-
Automatic Setを使って値を割り当てる None アクションは取らない Temporary 一時的な変更のためにインタラクティブな操作を許す func func[val,expr]を評価する - Dynamic[expr,f]はDynamic[expr,{None,f,None}]と等価である.
- Dynamic[expr,Temporary]はDynamic[expr,{None,Temporary,Automatic}]と等価である.
- Dynamic[expr,f]は expr に割り当てられた値に制約条件を強制するために使うことができる.
- Dynamic[expr,f]は,expr が x+y のような式であるとき,個々の変数の割当てに使うことができる.
- 関数func[val,expr]は,exprに割当てを行う場合には,属性HoldRestを持っていなければならない.Function[{v,e},body,HoldRest]を使って,この属性を持たせることができる.
- 次のオプションを使うことができる.
-
BaseStyle {} 表示オブジェクトのベーススタイル指定 Deinitialization None Dynamicが表示不可になったときに評価する式 Evaluator Automatic 評価に使うカーネル Initialization None Dynamicが最初に表示されたときに評価する式 ShrinkingDelay 0. 表示オブジェクトが小さくなる場合の,縮めるまでの遅延時間 SynchronousUpdating True コンテンツを同期して評価するかどうか TrackedSymbols All その変更が更新を引き起す記号 UpdateInterval Infinity 更新を行う時間間隔 - Dynamic[e]は,StandardFormおよびTraditionalFormでは e の値を動的に更新した現行値として表示されるが,InputFormとOutputFormでは単にDynamic[e]として表示される.
- Dynamic[expr]は遅延的割当てに類似するものを提供する.この場合,値は式の評価によってではなく表示の必要性によって値が暗示的にリクエストされる.
例題
すべて開く すべて閉じる例 (1)
スコープ (24)
基本的なDynamic (6)
任意の式をDynamicで包み込むことができる:
Dynamic /@ {1 + x, "string", Graphics[{Red, Disk[]}, ImageSize -> Tiny]}DynamicはStandardFormでは見えないが,それでも存在している:
InputForm /@ %Dynamicを使い,
に従って現在表示されている値とリンクする:
Dynamic[n]Slider[Dynamic[n]]Dynamic[NIntegrate[Sin[t], {t, -Pi, n}]]SetterBar[Dynamic[n], Range[0, 1, 0.2]]Dynamic[Plot[Sin[(n + 1) x], {x, 0, 6}]]デフォルトで,Dynamic内の変数は局所化されない:
{Slider[Dynamic[x]], Dynamic[x]}DynamicModuleを使って変数を局所化する:
{DynamicModule[{x}, {Slider[Dynamic[x]], Dynamic[x]}], Dynamic[x]}{DynamicModule[{x = 0.5}, {Slider[Dynamic[x]], Dynamic[x]}], Dynamic[x]}Dynamicの式は自己誘発的なことがある:
DynamicModule[{x = 1}, Dynamic[x = Max[0, x - 0.01]]]Sliderとともに使う:
DynamicModule[{x = 1}, {Slider[Dynamic[x]], Dynamic[x = Max[0, x - 0.01]]}]RandomRealやDateStringのような式は自動的には更新されない:
Dynamic[RandomReal[]]Dynamic[DateString[]]UpdateIntervalを使って動的更新を強制する:
Dynamic[RandomReal[], UpdateInterval -> 1 / 2]Dynamic[DateString[], UpdateInterval -> 1]Dynamicは引数をホールドにし,出力として表示されるまでは決して評価しない:
Dynamic[a = 5];上記のDynamicは全く表示されなかったので,割当ては全く実行されなかった:
aDynamicを置く (3)
Plotは出力作成のために特定の数値を必要とする:
DynamicModule[{x}, {Slider[Dynamic[x], {1, 5}], Plot[Sin[Dynamic[x]i], {i, 0, 2Pi}]}]DynamicModule[{x}, {Slider[Dynamic[x], {1, 5}], Dynamic[Plot[Sin[x i], {i, 0, 2Pi}]]}]Dynamicの式を別々に更新することで効率が上がる:
x = Plot3D[Sin[n m], {n, 0, 4}, {m, 0, 4}];Slider[Dynamic[y]]TabView[{{Dynamic[x], Dynamic[y]}, Dynamic[{x, y}]}]Dynamicで囲むことで,グラフィックス座標を制御入力として使う:
{DynamicModule[{p = {0, 0}}, Framed@Graphics[{Locator[Dynamic[p]]}, PlotRange -> 1, PlotLabel -> Dynamic[p]]], DynamicModule[{p = {0, 0}}, Framed@Graphics[{Dynamic[Locator[p]]}, PlotRange -> 1, PlotLabel -> Dynamic[p]]]}グラフィックス座標を制御入力として使い,2Dスライダー上での効果を見る:
DynamicModule[{p1 = {0, 0}, p2 = {1, 0}, p3 = {0, 1}}, {Framed@Graphics[Polygon[{Dynamic[p1], Dynamic[p2], Dynamic[p3]}], PlotRange -> 1], Column[Slider2D[#, {-1, 1}]& /@ {Dynamic[p1], Dynamic[p2], Dynamic[p3]}]}]インタラクティブなDynamic (8)
Dynamicを使ってSlider等のインタラクティブなコントロールと変数を結び付ける:
{Slider[Dynamic[x]], Dynamic[x]}{Slider2D[Dynamic[x]], Dynamic[x]}{InputField[Dynamic[x]], Dynamic[x]}{ColorSlider[Dynamic[x]], Dynamic[x]}{PopupMenu[Dynamic[x], Range[10]], Dynamic[x]}DynamicModule[{x = {0, 0}}, {Graphics[Locator[Dynamic[x]], PlotRange -> 1], Dynamic[x]}]Dynamicを使ってTabViewのようなビュー要素を制御する:
d = Table[Graphics[Disk[], ImageSize -> t], {t, {10, 20, 30, 40}}]{TabView[d, Dynamic[x]], Dynamic[x]}{FlipView[d, Dynamic[x]], Dynamic[x]}{PopupView[d, Dynamic[x]], Dynamic[x]}{OpenerView[{Disk, d}, Dynamic[t]], Dynamic[t]}Dynamicを使ってImageSizeのようなフロントエンドオプションを設定する:
Column[{PopupMenu[Dynamic[size], {Tiny, Small, Medium, Large}], Graphics[Disk[], ImageSize -> Dynamic[size]]}]発展:Dynamic (7)
デフォルトで,Dynamicはインタラクティブ要素内で用いられると割当て操作を行う:
{Slider[Dynamic[x]], Dynamic[x]}{Slider[Dynamic[y, (y = #)&]], Dynamic[y]}{Slider[Dynamic[z, Automatic]], Dynamic[z]}第2引数を使ってインタラクション中に評価される関数を指定する:
col = None;{Slider[Dynamic[x, (col = Blue;x = #)&], Background -> Dynamic[col]], Dynamic[x]}インタラクション中とインタラクション後に評価される2つの関数のリストを与える:
col = None;{Slider[Dynamic[x, {(col = Blue;x = #)&, (col = Green)&}], Background -> Dynamic[col]], Dynamic[x]}インタラクションの前,間,後に評価される3つの関数のリストを与える:
x = 0.5;{Slider[Dynamic[x, {(y = x)&, (x = #)&, (x = y)&}]], Dynamic[x]}Temporaryを使ってインタラクションの最後に動的変数を更新する:
{Slider[Dynamic[x, Temporary]], Dynamic[x]}Noneを使って動的変数の更新を不可とする:
{Slider[Dynamic[x, None]], Dynamic[x]}Dynamicは,インタラクティブに設定可能なフロントエンドオプションの割当て操作も行う:
DynamicModule[{pt = {2, 4, 2}}, Column[{Dynamic[pt], Graphics3D[Cuboid[], ViewPoint -> Dynamic[pt]]}]]オプション (10)
BaseStyle (1)
Deinitialization (1)
Evaluator (1)
"Local"という名前のカーネルでのみ実行されるDynamicを指定する:
Dynamic[$CommandLine, Evaluator -> "Local"]ExcludedContexts (1)
デフォルトで,特定のシステム内部コンテキストは初期化オプションに保存される:
x := $TimeZone
Dynamic[x, SaveDefinitions -> True]//ToBoxesExcludedContexts{}を使ってプロテクトされていないすべてのシンボルの定義を保存する:
Dynamic[x, ExcludedContexts -> {}, SaveDefinitions -> True]//ToBoxesIncludedContexts (1)
Initialization (2)
f[x_] := Range[x]Dynamic[f[10]]Initializationを使って出力の表示に必要な式を評価する:
Dynamic[g[10], Initialization :> (g[x_] := Range[x])]ShrinkingDelay (1)
SetterBar[Dynamic[h], {Graphics[Disk[], ImageSize -> Tiny] -> "画像", 1 -> "数字"}]ShrinkingDelayを使って出力サイズを縮小する前に一定の経過時間を置く:
Framed /@ {Dynamic[h], Dynamic[h, ShrinkingDelay -> 2]}SynchronousUpdating (1)
アプリケーション (5)
DynamicModule[{p = {0, 1}}, Graphics[{Dashed, Circle[], PointSize[0.1], Point[Dynamic[p, (p = Normalize[#])&]]}, ImageSize -> Tiny, PlotRange -> 1.2]]DynamicModule[{a = 0, b = 0, s = {{5, 30}, {1, Infinity}}}, 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 -> s}}]]]Triggerをコントロールにして,経過時間(分,秒)を記録するタイマーを作る:
{Trigger[Dynamic[x, (a = FractionalPart[#];x = Round[#])&], {0, Infinity}], Dynamic[{Quotient[x, 60], Mod[x, 60], SetPrecision[10a, 2]}]}DynamicModule[{c}, {PopupMenu[Dynamic[c], CountryData[]], Dynamic[CountryData[c, "Shape"], SynchronousUpdating -> False]}]
| |
カスタムコントロール,例えば範囲が
の角度スライダーを構築する:
DynamicModule[{angle = 0, p = {1, 0}}, {LocatorPane[Dynamic[p, (angle = ArcTan@@#;p = {Cos[angle], Sin[angle]})&], Graphics[{Circle[], Arrowheads[0.15], Arrow[Dynamic[{{0, 0}, p}]]}, ImageSize -> Tiny], Appearance -> None], Dynamic[angle]}]DynamicModule[{angle = 0, p = {1, 0}, angleCalc}, {LocatorPane[Dynamic[p, (angleCalc@@Normalize /@ {#, p})&], Graphics[{Circle[], Arrowheads[0.15], Arrow[Dynamic[{{0, 0}, p}]]}, ImageSize -> Tiny], Appearance -> None], Dynamic[angle]}, Initialization :> (angleCalc[newp_, oldp_] := (angle = angle + ArcCos[newp.oldp]Sign[Cross[newp].(newp - oldp)];p = {Cos[angle], Sin[angle]}))]特性と関係 (4)
Dynamicを使ってそのコンテンツを直接表示することができる:
DynamicModule[{x = 0}, Dynamic[x]]単純に表示するDynamicにはインタラクティブ性はなく,第2引数は影響しない:
DynamicModule[{x = 0}, Dynamic[x, (x = 1)&]]インタラクティブなコントロール,オブジェクト,あるいはオプションの値としてDynamicをフィードすることもできる:
DynamicModule[{x = 0}, Slider[Dynamic[x]]]値のスタイルのDynamicの値がインタラクティブに変更されると第2引数を呼び出される:
DynamicModule[{x = 0}, Slider[Dynamic[x, (x = 1)&]]]動的な式は,結果がスクリーンに表示されるまではコンテンツを評価しない:
x=.;
result = Dynamic[x = 5];
Print["x = ", x]result
Print["x = ", x];時間が重要な場合はFinishDynamicを使う:
Dynamic[y = 10]
FinishDynamic[]
Print["y = ", y];同期された動的要素はDynamicEvaluationTimeoutの値によっては時間的制約がある:
Style[Dynamic[Pause[2];"result"], DynamicEvaluationTimeout -> 1]評価は$DynamicEvaluationを使って動的に評価されている場合は検知することができる:
{Dynamic[$DynamicEvaluation], $DynamicEvaluation}考えられる問題 (5)
{Slider[Dynamic[1 - x]], Dynamic[x]}Dynamicの第2引数を用いて割当て操作を制御する:
{Slider[Dynamic[1 - y, (y = 1 - #)&]], Dynamic[y]}自己誘発的なDynamicは簡単に無限ループに陥ってしまう(終了したければ出力を削除する):
DynamicModule[{x = 1}, Dynamic[x = x + 1]]デフォルトで,ビュー要素は表示の前にコンテンツ全体を生成する:
Timing[MenuView[(# -> PolyhedronData[#])& /@ PolyhedronData["Uniform"]]]DynamicとImageSize->Automaticを使って表示されるときにだけコンテンツを生成するようにする:
Timing[MenuView[(# -> Dynamic[PolyhedronData[#]])& /@ PolyhedronData["Uniform"], ImageSize -> Automatic]]Module変数は初期化されない.Module変数を返すとシンボル名がリークされる:
Module[{x = 5}, Dynamic[x]]
FinishDynamic[];
Quit[]一般に,変数は初期化されDynamicModuleを使って局所化されなければならない:
DynamicModule[{x = 5}, Dynamic[x]]
FinishDynamic[];
Quit[]Dynamic[Module[{x = 5}, x]]
FinishDynamic[];
Quit[]デフォルトで,"System`"シンボルに付けられた定義は取り込まれない:
x := Subscript[y, 1]
Subscript[y, 1] := 17
Options[Dynamic[x, SaveDefinitions -> True]//ToBoxes, Initialization]ExcludedContexts{}を使ってすべてのコンテキストから定義を取り込む:
Options[Dynamic[x, SaveDefinitions -> True, ExcludedContexts -> {}]//ToBoxes, Initialization]Clear[Subscript]
y/:Subscript[y, 1] = 17
Options[Dynamic[x, SaveDefinitions -> True]//ToBoxes, Initialization]おもしろい例題 (6)
連結したSlider:
{Slider[Dynamic[x]], Slider[Dynamic[1 - x, (x = 1 - #)&]]}連結したSlider2D:
{Slider2D[Dynamic[r], {-1, 1}], Slider2D[Dynamic[Through[{Cos, Sin}[ArcTan@@r]], (r = Normalize[#])&], {-1, 1}], Slider2D[Dynamic[{r[[1]], Sin[r[[1]] Pi]}, (r = {#[[1]], Sin[#[[1]] Pi]})&], {-1, 1}], Slider2D[Dynamic[{r[[1]], Cos[r[[1]] Pi]}, (r = {#[[1]], Cos[#[[1]] Pi]})&], {-1, 1}]}「もとに戻る」Slider:
DynamicModule[{x = 1}, {Slider[Dynamic[x]], Dynamic[x = Max[0, x - 0.01]]}]マウスがグラフィックスエリアを動くのに合わせて,そのマウスの位置の中心に円板を置く:
Framed@Graphics[Disk[Dynamic[MousePosition[{"Graphics", Graphics}, {0, 0}]], 0.2], PlotRange -> 2]DynamicModule[{pt = {0, 0}}, Framed@Graphics[Disk[Dynamic[pt = MousePosition[{"Graphics", Graphics}, pt];pt], 0.2], PlotRange -> 2]]枠で囲まれたエリア内でクリックしてボールが跳ねる様子を見る:
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}}], "MouseDown" :> (AppendTo[contents, {MousePosition["Graphics"], {0, 0}}])]]テクニカルノート
関連するガイド
-
▪
- 動的インタラクティブ機能言語 ▪
- カスタムインターフェースの構築 ▪
- クリックインタラクティブパネル ▪
- 低レベルインターフェース制御 ▪
- インスペクタの作成 ▪
- 標準名前空間 ▪
- 評価の制御 ▪
- ダイアログボックス ▪
- コントロールオブジェクト ▪
- 画像の作成とインポート ▪
- 記号的なグラフィックス言語 ▪
- ユーザインタラクションの設定
関連するワークフロー
- 自動更新される動的コンテンツをノートブックに含める ▪
- ロケータのコントロールを使う ▪
- Manipulateを構築する ▪
- 動的コンテンツについての警告が表示されないようにする ▪
- 変数の値を動的に追跡する
テキスト
Wolfram Research (2007), Dynamic, Wolfram言語関数, https://reference.wolfram.com/language/ref/Dynamic.html.
CMS
Wolfram Language. 2007. "Dynamic." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/Dynamic.html.
APA
Wolfram Language. (2007). Dynamic. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/Dynamic.html
BibTeX
@misc{reference.wolfram_2026_dynamic, author="Wolfram Research", title="{Dynamic}", year="2007", howpublished="\url{https://reference.wolfram.com/language/ref/Dynamic.html}", note=[Accessed: 13-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_dynamic, organization={Wolfram Research}, title={Dynamic}, year={2007}, url={https://reference.wolfram.com/language/ref/Dynamic.html}, note=[Accessed: 13-September-2026]}