ダイアログボックスの作成

Wolframシステムでは,ダイアログボックスとはユーザに情報を提供したりユーザからの入力を要求したりするために使われるカスタマイズされたノートブックのことである.

ダイアログに関連付けられるプロパティが2つある.

modalダイアログが閉じるまで,フロントエンドの他の要素へのアクセスを禁止する.これはオプションModalを使って明示的に設定しなければならない
blockingダイアログが閉じるまでカーネルをブロックする

ダイアログのプロパティ

モーダルダイアログは,ユーザが何か別のことを行う前にダイアログに応答することを要求する.これにより,フロントエンドはある評価を完了または開始するために必要な情報を得ることができる.例えば,ほとんどのアプリケーションは閉じるときにモーダルダイアログが現れ,ユーザに変更した部分を保存するかどうかを尋ねる.その応答は,どのようにアプリケーションを閉じるかを決めるのに必須なので,ユーザはそれに応答するまでプログラムの他の部分にはアクセスできない.オプションをModal->Trueに設定するとダイアログがモーダルになる.

注意:モーダルダイアログが開いている間は,ユーザはフロントエンドの他のノートブックにアクセスすることができない.このダイアログを閉じるメカニズムがない場合は,Wolframシステムは実質的にフリーズする.

ブロックダイアログは,ユーザがそれに応答するまで実行中の評価を中断するが,フロントエンドの他の部分へのアクセスは禁止しない.これらのダイアログが評価されているカーネルはダイアログが閉じられるまで実質的にブロックされる.例えば,選択ダイアログは評価を開始し,ユーザが値を選ぶまで待機し,それから値を返して評価を終了する.ダイアログが開いている間にメインリンクを通して送られてくる他のすべての評価は待ち行列に入り,ダイアログが閉じられてから評価される.

ダイアログの中には,システム検索ダイアログやメッセージダイアログ等のように,モーダルでもブロックでもないものがある.

ダイアログボタン

ダイアログには通常ボタンが含まれており,ユーザはこれを使って質問,メッセージ,その他要求された入力に応答することができる.これらのボタンの一つがデフォルトの動作であり,ダイアログが開いたときにハイライトされている.その他,ほとんど常に含まれているボタンにキャンセルボタンがある.これはダイアログを閉じ,ダイアログの動作を放棄する.

1.gif

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}]クリックされたときに対応する を評価するOKおよびキャンセルボタン
ChoiceButtons[{lblok,lblcancel},{actok,actcancel}]
ラベル が付いており,クリックされたときに対応する を評価する,OKおよびキャンセルボタン

ダイアログボタン

DialogInputまたはCreateDialogを使って生成されたダイアログでは,Enterを押すことはOK(デフォルト)ボタンを,Escを押すことはキャンセルボタンをクリックすることに等しい.一つのダイアログ中にいくつかのデフォルトボタンがある場合は,Enterではダイアログの最初のボタンが使われる.同様にEscを押すとダイアログ中の最初のキャンセルボタンが使われる.

1列にキャンセルボタンとデフォルトボタンを作成する.

In[6]:=
Click for copyable input
Out[6]=

ChoiceButtonsを使うと,現行のコンピュータシステムに標準の順序でデフォルトボタンとキャンセルボタンが表示される.

In[3]:=
Click for copyable input
Out[3]=

ダイアログノートブック

ダイアログノートブックはフロントエンド内の別のウィンドウでノートブックとして,またはセル内の式として開くことができる.ダイアログノートブックはモーダルであることもないこともある非ブロックダイアログである.

CreateDialog[expr]expr を含むダイアログノートブックをフロントエンドで作成し,開く
DialogNotebook[{cell1,cell2,}]フロントエンドで操作することのできるダイアログノートブックのセル内での表現
MessageDialog[expr]expr を含むメッセージダイアログノートブックをフロントエンドで作成し,開く
DialogReturn[expr]ダイアログウィンドウを閉じ,ダイアログから式 expr を返す
Modal作成されたダイアログをフロントエンドでモーダルにするかどうかを指定するCreateDialogのオプション

ダイアログノートブック関数

注意:モーダルダイアログが開いている間,ユーザはフロントエンドの他のノートブックにアクセスすることができない.ダイアログを閉じるメカニズムがない場合,Wolframシステムは事実上フリーズしてしまう.

以下は通知あるいはメッセージを表示するダイアログボックスである.

Modal->Trueと設定すると,同じダイアログをモーダルにすることができる.

あるいは,以下のようにしてダイアログノートブックのセル内表現を作成する.{}[[3]]ボタンをクリックするかをDialogNotebook式をCreateDialogでラップすることにより,フロントエンドでノートブックを含む別のウィンドウを開くことができる.

In[43]:=
Click for copyable input
Out[43]=

メッセージを表示するダイアログは,デフォルトでDefaultButtonを含むMessageDialogを使って作成することもできる.

ユーザに計算が終了したことを知らせるメッセージダイアログである.

In[4]:=
Click for copyable input
Out[4]=

13.gif

Beepを使ってメッセージダイアログにビープ音も加えると便利なことがある.

In[3]:=
Click for copyable input
Out[3]=

ダイアログボックスは入力を受け入れる他,閉じられたときに式を評価することもできる.これはDialogReturnで行える.以下はユーザの入力を受け入れ,変数の割当を評価するモーダルダイアログボックスである.

名と姓を入力フィールドにタイプしOKをクリックすると,入力値がnameに割り当てられる.

15.gif

In[22]:=
Click for copyable input
Out[22]=

Wolframシステム環境設定ダイアログ等のフロントエンドダイアログのいくつかはCreateDialogを使って作成された.

16.gif

ブロックダイアログ

ブロックダイアログが評価されるカーネルは,そのダイアログが閉じられるまでブロックされる.

DialogReturn[expr]ダイアログウィンドウを閉じ,ダイアログから式 expr を返す
DialogInput[expr]ダイアログノートブックとして expr を作成し,DialogReturn[e]が評価されるまで待ち,結果 e を返す
ChoiceDialog[expr]フロントエンドで expr を含む選択ダイアログノートブックを作成し,開く

ブロックダイアログ関数

valが123に設定されるまでカーネルがブロックされる.

In[53]:=
Click for copyable input
Out[53]=

ここでは,ユーザがキャンセルOKを選んで値をremoveQに設定するまでカーネルがブロックされる.

In[7]:=
Click for copyable input
Out[7]=

選択項目を表示するダイアログはChoiceDialogを使って作成することもできる.これはカーネルをブロックして,CancelButtonが選ばれたらFalseを,DefaultButtonが選ばれたらTrueを返す.

In[4]:=
Click for copyable input
Out[4]=

19.gif

ブロックダイアログがボタンかアクションメニューによって投げられた場合,タイムアウトにならないようにボタンアクションをメインリンクに渡す.これはMethod->"Queued"と設定して行うことができる.

In[1]:=
Click for copyable input
Out[1]=
In[3]:=
Click for copyable input
Out[3]=

システムダイアログ

Wolfram言語はSystemDialogInputやフロントエンドトークンの他,FileNameSetterColorSliderColorSetterを含むユーザインターフェース特有のボタン関数を使って,システムダイアログへのアクセスも提供している.

SystemDialogInput["FileOpen"]システムファイルを開くダイアログを開き,選択されたファイルパスを返す
SystemDialogInput["FileSave"]システムファイルの保存ダイアログを開き,選択されたファイルパスを返す
SystemDialogInput["Color"]システムの色選択ダイアログを開き,選択されたRGBColor値を返す
FrontEndTokenExecute["PrintDialog"]
システムの印刷ダイアログを開き,現行のノートブックを印刷する

一般的なシステムダイアログにプログラムでアクセス

選択されたファイルのファイルパスを返す,システムのファイルを開くダイアログである.

In[19]:=
Click for copyable input
Out[19]=

20.gif

は選ばれたファイルのファイルパスを返すことにより,と類似した動作を示す.

In[29]:=
Click for copyable input
Out[29]=

23.gif

次はシステムの色選択ダイアログを開き,選択した色のRGBColor値を返す.

In[8]:=
Click for copyable input
Out[8]=

24.gif

フロントエンドトークンのでシステムの印刷ダイアログが開き,ユーザがPrintを選択したときに,ノートブックが印刷される.

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 に設定された色スライダーを生成する

既存のボタン関数を使った,一般のシステムダイアログへのアクセス

以下はシステムのファイルオープンダイアログを開き,選択されたファイルのファイルパスを動的変数に割り当てるボタンである.

In[14]:=
Click for copyable input
Out[14]=

27.gif

はシステムの複数ファイルオープンダイアログを呼び出す.

In[15]:=
Click for copyable input
Out[15]=

29.gif

は,選択されたファイルのパスを動的変数に割り当てることによりと同じ動作を示す.

In[16]:=
Click for copyable input
Out[16]=

32.gif

以下ではシステムのディレクトリ選択ダイアログを開き,選択されたディレクトリのファイルパスを動的変数に割り当てるボタンを作成する.

In[17]:=
Click for copyable input
Out[17]=

33.gif

以下は,動的変数の値をRGBカラーに割り当てるために使うことのできる色見本である.色見本をクリックすると,システムの色選択ダイアログが開く.

In[20]:=
Click for copyable input
Out[20]=

34.gif

ColorSliderは色スペクトルの他にColorSetterスワッチを含むコントロールオブジェクトである.スペクトルをダブルクリックすると,システムの色選択ダイアログが開く.

In[21]:=
Click for copyable input
Out[21]=

35.gif

Wolframシステム入力ダイアログ

Wolfram言語は通常与えられた入力を何でも取り,それを処理することで動作する.しかしより多くの入力を明示的に要求する必要があることもある.これはInputおよびInputStringを使って行われる.

Input[]完全な式を入力として読む
Input[prompt]入力を要求し,プロンプトとして prompt を表示する
Input[prompt,init]入力を要求し,プロンプトとして init を入力フィールドの最初のコンテンツとした prompt を表示する
InputString[]入力として文字列を読む
InputString[prompt]入力を要求し,プロンプトとして prompt を表示する
InputString[prompt,init]入力を要求し,プロンプトとして init を入力フィールドの最初のコンテンツとした prompt を表示する

入力ダイアログを要求する

注意:テキストベースのインターフェースではInputおよびInputStringは改行によって終了する標準的な入力だけを待つ.詳細は「入力の要求」を参照のこと.

Input ダイアログ

次は,入力の多項式展開を返す.

In[3]:=
Click for copyable input
Out[3]=

36.gif

InputString ダイアログ

ここでは入力された文字列が部分文字列のリストに分解される.

In[5]:=
Click for copyable input
Out[5]=

37.gif

高度な例題

進行状況ダイアログ

次は,計算中に動的変数の値を追跡する進行状況ダイアログである.

In[69]:=
Click for copyable input

保存ダイアログ

下のモーダルダイアログは,ユーザがOKを選んだら入力済みのノートブックを保存し,キャンセルを選んだら計算を放棄する.

検索ダイアログ

次の例は,さまざまなアプリケーションに見られるものに類似した検索ダイアログである.

メモリ使用量ダイアログ

Wolframシステムはどの時点でも,フロントエンドおよびカーネルプロセスで使用されているメモリ量を追跡することができる.以下はそのデータをリアルタイムで表示するダイアログである.