创建对话框

在 Wolfram 语言中,对话框是用来给用户提供信息或者要求用户输入信息的一类自定义笔记本.

下面是与对话框有关的两个属性.

modal阻止访问前端的其它元素,直至对话框关闭,并且必须使用选项 Modal 明确设置
blocking阻止内核运行,直至对话框关闭

对话框属性.

模态(modal)对话框要求用户在做任何其它事情之前对对话框作出响应. 这样前端就可以获取完成或者发起一次计算所需的信息. 例如,当大部分应用程序关闭的时候,将出现一个模态对话框,提示用户保存所作的改动. 由于用户响应对决定应用程序应该如何关闭很重要,对话框将阻止用户访问程序的其它部分,直到用户对其做出响应. 设置选项 Modal->True 将使对话框具有模态属性.

注意:当对话框打开时,模态对话框将阻止用户访问其它笔记本. 如果没有关闭对话框的机制,Wolfram 语言将停止运行.

阻止(blocking)对话框暂停计算,直至用户对其作出响应,但是它并不阻止用户访问前端的其它部分. 运行对话框计算的内核将暂停直至对话框关闭. 例如,一个选择对话框将启动一次计算,并且进行等待直至用户选择一个值,然后通过返回该值完成计算. 任何在对话框打开时通过主链接发送的计算将依次排队等待,只要对话框一关闭,就执行计算.

有些对话框既不是模态对话框,也不是阻止对话框,比如系统查找对话框和消息对话框.

对话框按钮

对话框通常包括允许用户对问题、消息或者其它要求的输入作出响应的按钮. 其中一类按钮是打开对话框时的默认行为,并且会突出显示. 另一类总是出现的行为是取消按钮,它将关闭对话框并且退出对话框行为.

1.gif

在 Wolfram 语言中,利用一系列流水线函数创建默认和取消按钮.

DefaultButton[]关闭一个对话框的 OK 按钮,并且当按住 Enter 时是默认的
DefaultButton[action]标签为 OK 的按钮,并且当它被点击或者按下 Enter 时计算 action
DefaultButton[label,action]标签为 label 的按钮,并且当它被点击或者按下 Enter 时计算 action
CancelButton[]关闭一个对话框的 Cancel 按钮,当按下 Esc 时,它是默认的
CancelButton[action]标签为 Cancel 的按钮,当它被点击或者按下 Esc 时计算 action
CancelButton[label,action]标签为 label 的按钮,当它被点击或者按下 Esc 时计算 action
ChoiceButtons[]一对 OKCancel 按钮
ChoiceButtons[{actok,actcancel}]当点击时计算相应的 OKCancel 按钮
ChoiceButtons[{lblok,lblcancel},{actok,actcancel}]
标签为 OKCancel 按钮,当点击时计算相应的

对话框按钮.

在利用 DialogInput 或者 CreateDialog 创建的对话框中,按下 Enter 等价于点击 OK(默认)按钮,而按下 Esc 等价于点击 Cancel 按钮. 如果在单个对话框中存在几个默认按钮,Enter 将使用对话框中的第一个按钮. 类似地,按下 Esc 将使用对话框中的第一个 Cancel 按钮.

在同一行中创建一个取消按钮和一个默认按钮.

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
ModalCreateDialog 的选项,指定所创建的对话框是否对于前端应该是模态的(modal)

对话框笔记本函数.

注意:模态对话框将在对话框打开时,阻止用户访问前端的其它笔记本. 如果不存在关闭对话框的机制,Wolfram 语言将停止运行.

下面的对话框给出一个提示信息或者通知信息.

设置 Modal->True 使上面的对话框成为模态对话框.

或者,创建该对话框笔记本的单元内表示. 通过点击 {}[[3]] 按钮或者在 DialogNotebook 笔记本周围使用 CreateDialog 封装,可以在前端打开一个包含该笔记本的独立窗口.

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

显示信息的对话框也可以通过使用 MessageDialog 创建,默认情况下,它包含 DefaultButton.

下面的信息通知用户运算完成.

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]=

这里,内置被阻止运行,直至用户通过选择 Cancel 或者 OKremoveQ 设置一个值.

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"]创建一个 Browse 按钮,打开系统文件打开对话框并且把值用 name 保存
FileNameSetter[name,"OpenList"]创建一个 Browse 按钮,打开系统多个文件打开对话框,并且把值用 name 保存
FileNameSetter[name,"Save"]创建一个 Browse 按钮,打开系统文件保存对话框,并且把值用 name 保存
FileNameSetter[name,"Directory"]创建一个 Browse 按钮,打开系统目录选择对话框,并且把值用 name 保存
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 语言经常需要获取输入,然后对输入进行处理. 有时候,程序可能需要要求更多的输入. 这可以通过使用 InputInputString 实现.

Input[]读入整个表达式作为输入
Input[prompt]要求输入,prompt 显示为 "prompt"
Input[prompt,init]要求输入,prompt 显示为 "prompt",其中 init 是输入域的初始内容
InputString[]将一个由字符组成的字符串作为输入读入
InputString[prompt]要求输入,prompt 显示为 "prompt"
InputString[prompt,init]要求输入,prompt 显示为 "prompt",其中 init 是输入域的初始内容

要求输入对话框.

注意:在基于文本的界面下,InputInputString 将等待标准输入,在换行时结束. 查看 要求输入 以获取更多信息.

Input 对话框

下面返回输入的多项式展开形式.

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

36.gif

InputString 对话框

下面的输入字符串被分割成一列子字符串.

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

37.gif

扩展范例

进程对话框

下面是一个进程对话框,它跟踪一次计算过程中动态变量 的值.

In[1]:=
Click for copyable input

保存对话框

下面是一个模态对话框,如果用户选择 Save 它将保存输入笔记本,如果用户选择 Cancel,它将退出操作.

查找对话框

下一个例子是一个查找对话框,与我们在许多其他应用程序中看到的相同.

内存使用对话框

Wolfram 语言可以跟踪前端和内核进程在任何给定时间内所使用的内存量. 下面的对话框显示实时数据.