创建面板
创建面板
面板如同键盘的延伸. 它们可以用来执行 Wolfram 语言中的许多操作,包括输入排版字符,对笔记本进行样式化处理以及进行各种计算. 如任何笔记本相同,可以使用菜单项创建面板,也可以通过编程创建面板.
| CreatePalette[expr] | 在前端中,创建并且打开包含 expr 的一个面板笔记本 |
| PaletteNotebook[{cell1,cell2,…}] | 一个面板笔记本的单元内表示,前端可以对其进行操作 |
面板笔记本具有一个独特的属性. 它们可以是一个当前选中的笔记本,但是通常不能是一个 InputNotebook. 这使得面板可以在前端键盘输入所指向的笔记本上执行操作. 更多信息,请见 "通过内核操作笔记本".
CreatePalette[expr] 创建一个包含 expr 的未保存面板笔记本,并且在一个不同的窗口打开. 如要保存这个面板,关闭该窗口,并且当保存对话框出现时保存该文件,或者利用 NotebookSave 通过程序保存该面板笔记本.
下面的面板利用 PasteButton 把字符粘贴到输入笔记本中. PasteButton 专门设计用于面板的使用. 它把内容直接粘贴到输入笔记本的插入点上. 当与 RawBoxes 一起使用时,PasteButton 会把未解释的框符粘贴到输入笔记本上.
CreatePalette[Grid[Partition[PasteButton[Style[#, 12], RawBoxes[#], ImageSize -> 24]& /@ {"π", "E", "I", "∞", "°", "×", "÷", "->", ":>", "==", "≠", "≤", "≥", "∈", "∍", "¬", "∧", "∨", "⋃", "⋂"}, 5], Spacings -> {0, 0}]];另外一种途径是,利用 PaletteNotebook 创建一个面板笔记本的单元内表示. 通过点击
按钮或者在 PaletteNotebook 表达式外加上 CreatePalette,就可以在前端打开包含该笔记本的一个独立窗口.
PaletteNotebook[Grid[Partition[PasteButton[Style[#, 12], RawBoxes[#], ImageSize -> 24]& /@ {"π", "E", "I", "∞", "°", "×", "÷", "->", ":>", "==", "≠", "≤", "≥", "∈", "∍", "¬", "∧", "∨", "⋃", "⋂"}, 5], Spacings -> {0, 0}]]πEI∞°×÷ -> :> == ≠ ≤ ≥ ∈∍¬∧∨⋃⋂π ∞ ° × ÷ ≠ ≤ ≥ ∈ ∍ ¬ ∧ ∨ ⋃ ⋂
"π"下面的这个面板利用前端令牌把带有样式的单元插到正在使用的笔记本中. 前端令牌从内核执行原先通常使用菜单完成的前端命令. 对于前端令牌的一个完整列表,参见 "前端令牌".
CreatePalette[Column[Button[Style[#, 12, FontFamily -> "Times"], FrontEndTokenExecute[InputNotebook[], "Style", #], Appearance -> "Palette", ImageSize -> 120]& /@ {"Title", "Subtitle", "Subsubtitle", "Section", "Subsection", "Subsubsection", "Text", "Code", "Input"}, Spacings -> 0]];f[a_, b_] := Button[Style[a, 12, FontFamily -> "Times"], FrontEndTokenExecute[b], Appearance -> "Palette", ImageSize -> 156]g[a_, b_] := Hyperlink[Style[a, 12, FontFamily -> "Times"], b, Appearance -> "Palette", BaseStyle -> {FontColor -> StandardBlue}, ImageSize -> 156]PaletteNotebook@Column[{f["Documentation Center", "OpenHelpLink"], g["Alphabetical Function Listing", "paclet:guide/AlphabeticalListing"], f["Delete Output", "DeleteGeneratedCells"], f["Quit Kernel", "EvaluatorQuit"]}, Spacings -> 0]CreatePalette 创建了一个带有各种选项集的笔记本,这样的选项集使得所产生的面板的外观和行为在典型意义上都是适当的. 然而,选项如 Magnification 和 DynamicUpdating 也可能是有用的.
1. 若要通过编程设置这些选项,必须在一个 CreatePalette 语句中指定上述的每个选项. 例如:
CreatePalette[expr,Magnification->1.0,DynamicUpdating->True]
注意:只有当面板函数功能被完全调试好,并且处于即可使用的状态时,设置 DynamicUpdating->True 才能完成,因为这样做可以防止前端退出可能含有也可能不含有程序错误的一次动态计算.
2. 若要通过 选项设置 设置这些选项,选择面板并且打开 选项设置:
在 笔记本选项 ▶ 显示选项,明确设置 Magnification 以避免从全局设置继承缩放率.
在 单元选项 ▶ 计算选项,明确设置 DynamicUpdating->True 以启用 Dynamic,即使动态更新在用户前端是禁用的.
如要保存该面板,点击面板窗口上的关闭按钮,您就可以得到提示信息,可以保存该面板或者利用 NotebookSave 通过编程保存该面板笔记本.
Dynamic[ExpandFileName /@ AbsoluteCurrentValue[$FrontEnd, PalettePath]]面板也可以作为 Wolfram 语言应用程序的一部分安装. 若要对您的应用程序添加一个面板,可在应用程序文件夹中创建一个 FrontEnd\Palettes\ 目录,然后把该面板保存到该目录中. 例如,面板 MyPalette.nb 应该放置于MyApplication\FrontEnd\Palettes\ 中.
非独立启动开关视窗
Dynamic 的第二个变量可以用来控制一个相反的启动开关视窗的状态,以使得在任何给定的时间内只有一个视窗是开启的.
CreatePalette[DynamicModule[{opener1 = True, opener2 = False},
Column[{OpenerView[{"First Opener", "text"}, Dynamic[opener1, (opener1 = #;opener2 = !opener2)&]], OpenerView[{"Second Opener", "text"}, Dynamic[opener2, (opener2 = #;opener1 = !opener1)&]]}]], WindowTitle -> "Palette"];也可以利用 TaggingRules 跟踪并且控制面板状态. 与动态变量不同,前端自动对 TaggingRules 进行缓存,以使得安装好的面板可以在多个前端进程中记住各个控件对象的状态,即使不能保存它们. 本章节不专门讨论这个问题,在 "存储并跟踪面板状态" 中对此有详细讨论,并且还提供了一组范例.
应用并且计算函数
PaletteNotebook@Column[Button[Defer[#[]], Inherited, BaseStyle -> "Evaluate", Evaluator -> None, Appearance -> "Palette"]& /@ {Expand, Factor, Apart}, Spacings -> 0.1]考虑下面的多项式. 突出显示该表达式,并且从上面的面板中选择 Expand[]. Wolfram 语言将对选择的内容应用该函数,并在适当的位置计算所得的表达式.
(4 x^4 + 8 x^2)^44096 x^8 + 8192 x^10 + 6144 x^12 + 2048 x^14 + 256 x^16