ダイアログボックスの作成
ダイアログボックスの作成
| modal | ダイアログが閉じるまで,フロントエンドの他の要素へのアクセスを禁止する.これはオプションModalを使って明示的に設定しなければならない |
| blocking | ダイアログが閉じるまでカーネルをブロックする |
モーダルダイアログは,ユーザが何か別のことを行う前にダイアログに応答することを要求する.これにより,フロントエンドはある評価を完了または開始するために必要な情報を得ることができる.例えば,ほとんどのアプリケーションは閉じるときにモーダルダイアログが現れ,ユーザに変更した部分を保存するかどうかを尋ねる.その応答は,どのようにアプリケーションを閉じるかを決めるのに必須なので,ユーザはそれに応答するまでプログラムの他の部分にはアクセスできない.オプションをModal->Trueに設定するとダイアログがモーダルになる.
注意:モーダルダイアログが開いている間は,ユーザはフロントエンドの他のノートブックにアクセスすることができない.このダイアログを閉じるメカニズムがない場合は,Wolframシステムは実質的にフリーズする.
ブロックダイアログは,ユーザがそれに応答するまで実行中の評価を中断するが,フロントエンドの他の部分へのアクセスは禁止しない.これらのダイアログが評価されているカーネルはダイアログが閉じられるまで実質的にブロックされる.例えば,選択ダイアログは評価を開始し,ユーザが値を選ぶまで待機し,それから値を返して評価を終了する.ダイアログが開いている間にメインリンクを通して送られてくる他のすべての評価は待ち行列に入り,ダイアログが閉じられてから評価される.
ダイアログには通常ボタンが含まれており,ユーザはこれを使って質問,メッセージ,その他要求された入力に応答することができる.これらのボタンの一つがデフォルトの動作であり,ダイアログが開いたときにハイライトされている.その他,ほとんど常に含まれているボタンにキャンセルボタンがある.これはダイアログを閉じ,ダイアログの動作を放棄する.
| DefaultButton[] | ダイアログを閉じ,Enterが押されたときのデフォルトであるOKボタン |
| DefaultButton[action] | OKのラベルが付いており,クリックされたときまたはEnterが押されたときに action を評価するボタン |
| DefaultButton[label,action] | label のラベルが付いており,クリックされたときまたはEnterが押されたときに action を評価するボタン |
| CancelButton[] | ダイアログを閉じ,Escが押されたときのデフォルトであるキャンセルボタン |
| CancelButton[action] | キャンセルのラベルが付いており,クリックされたときまたはEscが押されたときに action を評価するボタン |
| CancelButton[label,action] | label のラベルが付いており,クリックされたときまたはEscが押されたときに action を評価するボタン |
| ChoiceButtons[] | OKボタンとキャンセルボタンのペア |
| ChoiceButtons[{actok,actcancel}] | クリックされたときに対応する acti を評価するOKおよびキャンセルボタン |
| ChoiceButtons[{lblok,lblcancel},{actok,actcancel}] | |
ラベル lbli が付いており,クリックされたときに対応する acti を評価する,OKおよびキャンセルボタン | |
DialogInputまたはCreateDialogを使って生成されたダイアログでは,Enterを押すことはOK(デフォルト)ボタンを,Escを押すことはキャンセルボタンをクリックすることに等しい.一つのダイアログ中にいくつかのデフォルトボタンがある場合は,Enterではダイアログの最初のボタンが使われる.同様にEscを押すとダイアログ中の最初のキャンセルボタンが使われる.
Row[{CancelButton[], DefaultButton[]}]ChoiceButtonsを使うと,現行のコンピュータシステムに標準の順序でデフォルトボタンとキャンセルボタンが表示される.
ChoiceButtons[]ダイアログノートブックはフロントエンド内の別のウィンドウでノートブックとして,またはセル内の式として開くことができる.ダイアログノートブックはモーダルであることもないこともある非ブロックダイアログである.
| CreateDialog[expr] | expr を含むダイアログノートブックをフロントエンドで作成し,開く |
| DialogNotebook[{cell1,cell2,…}] | フロントエンドで操作することのできるダイアログノートブックのセル内での表現 |
| MessageDialog[expr] | expr を含むメッセージダイアログノートブックをフロントエンドで作成し,開く |
| DialogReturn[expr] | ダイアログウィンドウを閉じ,ダイアログから式 expr を返す |
| Modal | 作成されたダイアログをフロントエンドでモーダルにするかどうかを指定するCreateDialogのオプション |
注意:モーダルダイアログが開いている間,ユーザはフロントエンドの他のノートブックにアクセスすることができない.ダイアログを閉じるメカニズムがない場合,Wolframシステムは事実上フリーズしてしまう.
CreateDialog[Column[{"変更は保存されました.", DefaultButton[]}]];CreateDialog[Column[{"変更は保存されました.", DefaultButton[]}], Modal -> True];あるいは,以下のようにしてダイアログノートブックのセル内表現を作成する.{}[[3]]ボタンをクリックするかをDialogNotebook式をCreateDialogでラップすることにより,フロントエンドでノートブックを含む別のウィンドウを開くことができる.
DialogNotebook[Column[{"変更は保存されました.", DefaultButton[]}]]MessageDialog["変更は保存されました."];Mean@Transpose[FinancialData["DOW", "Jan. 1, 2001"]][[2]]
MessageDialog["計算が終了しました."];Beepを使ってメッセージダイアログにビープ音も加えると便利なことがある.
Mean@Transpose[FinancialData["DOW", "Jan. 1, 2001"]][[2]]
{Beep[], MessageDialog["計算が終了しました."]};ダイアログボックスは入力を受け入れる他,閉じられたときに式を評価することもできる.これはDialogReturnで行える.以下はユーザの入力を受け入れ,変数の割当を評価するモーダルダイアログボックスである.
CreateDialog[Grid[{{"姓:", InputField[Dynamic[ln], String]}, {"名:", InputField[Dynamic[fn], String]}, {CancelButton[], DefaultButton[DialogReturn[name = StringJoin[ln, ", ", fn]]]}}, Spacings -> {1, Automatic}, Alignment -> Left], Modal -> True];name| DialogReturn[expr] | ダイアログウィンドウを閉じ,ダイアログから式 expr を返す |
| DialogInput[expr] | |
| ChoiceDialog[expr] | フロントエンドで expr を含む選択ダイアログノートブックを作成し,開く |
val = DialogInput[Column[{"値:123", Button["設定", DialogReturn[123]]}]];valremoveQ = DialogInput[Column[{"続行しますか?", Row[{CancelButton[DialogReturn["いいえ"]], DefaultButton[DialogReturn["はい"]]}]}]];removeQ選択項目を表示するダイアログはChoiceDialogを使って作成することもできる.これはカーネルをブロックして,CancelButtonが選ばれたらFalseを,DefaultButtonが選ばれたらTrueを返す.
ChoiceDialog["続行しますか?"]ブロックダイアログがボタンかアクションメニューによって投げられた場合,タイムアウトにならないようにボタンアクションをメインリンクに渡す.これはMethod->"Queued"と設定して行うことができる.
Button["佐藤 翔太", ChoiceDialog["続行しますか?"], Method -> "Queued"]ActionMenu["佐藤 翔太", {"dialog1" :> ChoiceDialog["続行しますか?"], "print1" :> Print["佐藤 翔太"]}, Method -> "Queued"]Wolfram言語はSystemDialogInputやフロントエンドトークンの他,FileNameSetter,ColorSlider,ColorSetterを含むユーザインターフェース特有のボタン関数を使って,システムダイアログへのアクセスも提供している.
| SystemDialogInput["FileOpen"] | システムファイルを開くダイアログを開き,選択されたファイルパスを返す |
| SystemDialogInput["FileSave"] | システムファイルの保存ダイアログを開き,選択されたファイルパスを返す |
| SystemDialogInput["Color"] | システムの色選択ダイアログを開き,選択されたRGBColor値を返す |
| FrontEndTokenExecute["PrintDialog"] | |
システムの印刷ダイアログを開き,現行のノートブックを印刷する | |
SystemDialogInput["FileOpen", WindowTitle -> "ノートブックの選択"]SystemDialogInput["FileSave", WindowTitle -> "保存するノートブックの選択"]次はシステムの色選択ダイアログを開き,選択した色のRGBColor値を返す.
SystemDialogInput["Color"]FrontEndTokenExecute["PrintDialog"];| FileNameSetter[name,"Open"] | システムのファイルを開くダイアログを開き,値を name に保存するBrowseボタンを生成する |
| FileNameSetter[name,"OpenList"] | システムの複数ファイルを開くダイアログを開き,値を name に保存するBrowseボタンを生成する |
| FileNameSetter[name,"Save"] | システムのファイル保存ダイアログを開き,値を name に保存するBrowseボタンを生成する |
| FileNameSetter[name,"Directory"] | システムのディレクトリ選択ダイアログを開き,値を name に保存するBrowseボタンを生成する |
| ColorSetter[color] | クリックされるとシステムの色選択ダイアログを開く,color に設定された色見本を生成する |
| ColorSlider[color] | ダブルクリックされるとシステムの色選択ダイアログを開く,color に設定された色スライダーを生成する |
{FileNameSetter[Dynamic[a], "Open"], Dynamic[a]}{FileNameSetter[Dynamic[b], "OpenList"], Dynamic[b]}{FileNameSetter[Dynamic[c], "Save"], Dynamic[c]}{FileNameSetter[Dynamic[d], "Directory"], Dynamic[d]}{ColorSetter[Dynamic[e]], Dynamic[e]}{ColorSlider[Dynamic[f]], Dynamic[f]}Wolfram言語は通常与えられた入力を何でも取り,それを処理することで動作する.しかしより多くの入力を明示的に要求する必要があることもある.これはInputおよびInputStringを使って行われる.
| Input[] | 完全な式を入力として読む |
| Input[prompt] | 入力を要求し,プロンプトとして prompt を表示する |
| Input[prompt,init] | 入力を要求し,プロンプトとして init を入力フィールドの最初のコンテンツとした prompt を表示する |
| InputString[] | 入力として文字列を読む |
| InputString[prompt] | 入力を要求し,プロンプトとして prompt を表示する |
| InputString[prompt,init] | 入力を要求し,プロンプトとして init を入力フィールドの最初のコンテンツとした prompt を表示する |
注意:テキストベースのインターフェースではInputおよびInputStringは改行によって終了する標準的な入力だけを待つ.詳細は「入力の要求」を参照のこと.
Input ダイアログ
Expand[Input["多項式を入力してください"]]InputString ダイアログ
StringSplit[InputString["文字列を入力してください"]]進行状況ダイアログ
CreateProgressDialog[Dynamic[var_], {max_}] := CreateDialog[Column[{"計算の進行状況:", Row[{ProgressIndicator[Dynamic[var], {1, max}], " ", Dynamic[Round@N[100 var / max]], " %"}]}], WindowSize -> Fit]nb = CreateProgressDialog[Dynamic[n], {175}];
Do[FactorInteger[2 ^ k - 1], {k, 175}];
NotebookClose[nb];保存ダイアログ
SaveDialog[notebook_] := CreateDialog[DynamicModule[{title = ToString[WindowTitle /. AbsoluteOptions[notebook, WindowTitle]]}, Column[{Style["ノートブック'" <> title <> "'" <> "に加えた変更を保存しますか?", Bold], "保存しないと,変更した内容は失われます.", ChoiceButtons[{DialogReturn[NotebookSave[notebook, SystemDialogInput["FileSave", title]]], DialogReturn[$Canceled]}]}, Spacings -> 1]], WindowTitle -> "変更の保存...", Modal -> True, WindowSize -> {300, Fit}]検索ダイアログ
CreateDialog[DynamicModule[{s = "", dlg, s2 = "", ret, case = False}, Column[{"検索する語句:", InputField[Dynamic[s], String], Dynamic[s2], Row[{Button["次を検索", dlg = SelectedNotebook[];s2 = "";
ret = NotebookFind[DeleteCases[Select[Notebooks[], (Options[#, StyleDefinitions] =!= {StyleDefinitions -> "Palette.nb"})&], dlg][[1]], s, Next, CellContents, IgnoreCase -> case];
If[ret === $Failed, s2 = "見付かりませんでした."]], Button["前を検索", dlg = SelectedNotebook[];s2 = "";
ret = NotebookFind[DeleteCases[Select[Notebooks[], (Options[#, StyleDefinitions] =!= {StyleDefinitions -> "Palette.nb"})&], dlg][[1]], s, Previous, CellContents, IgnoreCase -> case];
If[ret === $Failed, s2 = "見付かりませんでした."]], Button["すべて検索", dlg = SelectedNotebook[];s2 = "";
ret = NotebookFind[DeleteCases[Select[Notebooks[], (Options[#, StyleDefinitions] =!= {StyleDefinitions -> "Palette.nb"})&], dlg][[1]], s, All, CellContents, IgnoreCase -> case];
If[ret === $Failed, s2 = "見付かりませんでした."]]}], Row[{"大文字,小文字を無視 ", Checkbox[Dynamic[case]]}]}, Automatic, .8]], WindowTitle -> "検索"];メモリ使用量ダイアログ
DynamicModule[{memhistory},
memhistory = Join[Table[Null, {149}, {2}], {N[{MemoryInUse[], MemoryInUse[$FrontEnd]}]}];CreateDialog[Dynamic[Row[{ListLinePlot[Tooltip[(First /@ memhistory) / 1024], PlotRange -> {0, 2 * 1048576.}, PlotLabel -> "カーネルメモリ使用量 (KB)", ImageSize -> 320, Axes -> {False, True}, AxesLabel -> "KB", GridLines -> {{15, 30, 45, 60, 75, 90, 105, 120, 135, 150}, Automatic}, Frame -> True], ListLinePlot[Tooltip[(Last /@ memhistory) / 1024], PlotRange -> {0, 2 * 1048576.}, PlotLabel -> "フロントエンドメモリ使用量 (KB)", ImageSize -> 320, Axes -> {False, True}, AxesLabel -> "KB", GridLines -> {{15, 30, 45, 60, 75, 90, 105, 120, 135, 150}, Automatic}, Frame -> True]}]], WindowSize -> {700, 240}, WindowTitle -> "メモリ使用量", NotebookDynamicExpression :> Dynamic[Refresh[If[Length[memhistory] < 150, AppendTo[memhistory, N[{MemoryInUse[], MemoryInUse[$FrontEnd]}]], memhistory = Delete[memhistory, 1];
AppendTo[memhistory, N[{MemoryInUse[], MemoryInUse[$FrontEnd]}]]], UpdateInterval -> 1, TrackedSymbols :> {}]]]];