Manipulate

Manipulate[expr,{u,umin,umax}]

产生一个带有控件的 expr 的版本,该控件允许对 u 值进行交互式操作.

Manipulate[expr,{u,umin,umax,du}]

允许 u 值在 uminumax 之间以步长 du 变化.

Manipulate[expr,{{u,uinit},umin,umax,}]

u 的初始值设置为 uinit.

Manipulate[expr,{{u,uinit,ulbl},}]

ulbl 作为 u 的控件标签.

Manipulate[expr,{u,{u1,u2,}}]

允许 u 取离散值 u1,u2,.

Manipulate[expr,{u,},{v,},]

使控件可以操纵每个 u,v,.

Manipulate[expr,"cu"{u,},"cv"{v,},]

把控件与外部设备上的一个指定的控制器相链接.

更多信息和选项

  • 表达式 expr 可以是任何的图形或其它的表达式. 如果设置为 None,仅显示控件.
  • 默认情况下,以下形式可以生成特定格式的控件:
  • {u,umin,umax}操控器(滑尺、动画等等)
    {u,umin,umax,du}步长为 du 的离散操控器
    {u,{xmin,ymin},{xmax,ymax}}二维滑尺
    {u,Locator}图形中的定位器
    {u,{u1,u2,}}一些元素的设置用工具条;更多的元素设置使用弹出菜单
    {u,{u1->lbl1,u2->lbl2,}}带有元素标签的设置用工具条或弹出菜单
    {u,{True, False}}选择框
    {u,color}颜色滑尺
    {u}空白输入栏
    {u,FormObject[]}带有指定字段的表单
    {u,func}从一个函数中创建一个任意控件
    {{u,uinit},}初值为 uinit 的控件
    {{u,uinit,ulbl},}标签为 ulbl 的控件
    {{u,},,opts}带特殊选项的控件
    Control[]一般控件对象
    Delimiter水平定界符
    字符串、视窗、单元表达式等显式的文本、视窗、单元等注释符号
  • 取代控件的可能注释包括带有头部 StringStyleRowItemTextExpressionCellTextCell 的表达式以及如 TabViewGridMulticolumn 那样的视窗和布局构造.
  • 在注释中,控件可用 Control 具体指定.
  • 一个控件的标签 ulbl 可以是任意表达式.
  • 选项设置 ControlType->type 尽可能使用指定类型的控件.
  • 可能的控件类型包括: AnimatorCheckboxCheckboxBarColorSetterColorSliderFormControlInputFieldIntervalSliderManipulatorPopupMenuRadioButtonRadioButtonBarSetterSetterBarSliderSlider2DTogglerBarTriggerVerticalSlider. None 也可以使用.
  • 可以为每个变量分别设置 ControlType 选项. 在变量的规范内也可以给出控件选项.
  • ControlType->Trigger 指定一个特定的变量,它应该由触发器控制.
  • 控件指定 {u,umin,umax,,Appearance->"Labeled"} 产生值显示为标签的滑尺.
  • {u,func} 格式中,Dynamic[u] 作为 func 的第一个参数给出.
  • 也可以使用格式 {u,umin,umax,func};它是按照 func[Dynamic[u],{umin,umax}] 执行计算的.
  • 格式 {u} 等价于 {u, InputField}{u, ColorSlider} 将一个默认颜色的滑尺作为控件给出.
  • {u,Locator} 格式中,u 的值是 xy 坐标组成的列表. 该坐标表示 expr 中的第一个图形,或者通过 expr 的每一个方向上的从 0 到 1 的范围.
  • 格式 {{u,{{x1,y1},{x2,y2},}},Locator} 为每一个 {xi,yi} 建立一个定位器,并且使 u 的值为所有 {xi,yi} 组成的列表.
  • 格式 {{u,uinit},{xmin,ymin},{xmax,ymax},Locator} 指定定位器的范围.
  • 选项设置 LocatorAutoCreate->All 指定新的定位器应该对没有碰到现有定位器的点击添加. Click 删除定位器.
  • {{u,{}},Locator,LocatorAutoCreate->All} 启动时没有定位器,但允许创建定位器.
  • 如果变量 u 的使用次数大于 1,给出它的链接控件.
  • 选项设置 ControlPlacement->pos 指定控件应该放在与 expr 相关的 pos 坐标处. pos 可能的设置有 BottomLeftRightTop.
  • 注释的位置可通过将其封装在一个带有 ControlPlacement 选项的 Item 中指定.
  • 可以给出下列的全部选项:
  • AlignmentAutomatic如何在显示区域中对齐输出
    AppearanceElementsAutomatic所有的控件元素包含在显示输出中
    AutoAction False当鼠标指向时是否自动改变控件
    AutorunSequencing Automatic如何自动运行控件
    BaselinePosition Automatic与周围的文本的对齐
    BaseStyle{}Manipulate 的基本样式规范
    Bookmarks{}书签的设置
    ContentSize Automatic内容区域的绝对尺寸
    ContinuousAction Automatic控件改变时是否连续更新
    ControllerLinking Automatic何时激活与外部控件的连接
    ControllerMethod None如何操作外部控件
    ControllerPath Automatic需要使用哪个外部控件
    ControlPlacement Automatic控件的位置
    ControlType Automatic所使用的控件的类型
    Deinitialization None如果删除 Manipulate 的输出,需要计算的表达式
    Deployed False是否部署显示的输出
    EvaluatorAutomatic计算所使用的内核
    ExcludedContexts AutomaticSaveDefinitions 中排除的上下文
    FrameLabel None外部框架的标签
    FrameMargins Automatic整体框架内的边幅
    ImageMargins 0整体 Manipulate 周围的边幅
    IncludedContexts AllSaveDefinitions 中包含的上下文
    Initialization None当输出第一次显示时要计算的表达式
    InterpolationOrderAutomatic书签之间动画转换的插入顺序
    KeyframeActionsAutomatic定时关键帧的控制设置
    LabelStyle {}控件区域的样式规范
    LocalizeVariables True是否将变量设置为局部变量
    Paneled True是否把显示的输出放入面板中
    PreserveImageOptionsTrue当重新生成图形时,是否保留图像大小和其它选项
    RotateLabel False在框架中是否旋转 y 标签
    SaveDefinitions False是否保存与 expr 关联的所有定义
    ShrinkingDelay0在显示对象变小前,缩小区域需要延迟的时间
    SynchronousInitialization True是否同步执行初始化
    SynchronousUpdating Automatic是否同步更新
    TouchscreenAutoZoomFalse当在触摸屏上激活时,是否放大到全屏
    TouchscreenControlPlacementAutomatic触摸屏上的控件的位置
    TrackedSymbols Full发生改变时触发输出更新的符号
    UndoTrackedVariables None当改变时,应该由前端撤销机制跟踪的变量
    UnsavedVariablesNone数值不能保存的变量
  • 选项 ControlPlacementControlType 可以以 {u,spec,opts} 的形式分别提供给每个变量.
  • Manipulate 是一个作用域结构,实现词典式作用域.
  • Manipulate 产生一个 DynamicModule 对象,并且 uv 等变量被指定为局部变量.
  • 默认设置 UnsavedVariables->{},变量 uv 等值会自动保存在记事本中,当记事本重新打开时它重新存储.
  • 设置 Initialization:>expr,当 Manipulate 执行或结果第一次显示在一个特定会话中时,计算 expr 表达式.
  • AppearanceElements 的设置可以是以下任何次序的列表: "ContentResizeArea""HideControlsButton""ManipulateMenu""SnapshotButton". 默认情况下,只包含 "ManipulateMenu" .
  • 按下快照按钮,直接在 Manipulate 的输出下产生一个单元,包含格式 With[{u=uval,},expr] 的输入, 指明所有变量的当前值.
  • 设置 ContinuousAction->None,显示一个明确的 更新 按钮,expr 是不会重新计算的,直到按下该按钮.
  • 默认设置 TrackedSymbols->Automatic,只有在 expr 中明确显示的符号才会被跟踪.
  • TrackedSymbols->True 记录在 Manipulate 控件中出现的符号.
  • 设置 TrackedSymbols->All,当任何符号在计算时发生改变的时候,才更新输出.
  • 默认设置 ControllerLinking->Automatic,当 Manipulate 是当前选择的一部分时,Manipulate 中的控件响应外部设备中的指定控件.
  • 外部设备的控件(例如游戏面板)可以包括游戏操纵杆、按钮等等.
  • 典型的外部控件说明包括:
  • "X""X1"x主要 x
    "Y""Y1"y主要 y
    "Z""Z1"z主要 z
    "XY""XY1"{x,y}主要 2 轴控件值
    "XYZ""XYZ1"{x,y,z}主要 3 轴控件值
    "X2""Y2""XY2" 等.xy{x,y}二级控件的值
    "XCyclic" 等.x循环值
    "XAbsolute" 等.x绝对控件位置的值
    "B1""B2" 等.b1b2切换按钮状态
    "B1Absolute""B2Absolute" 等.b1b2瞬时按钮状态
  • 在一个 Wolfram 系统特定进程中活跃的设备的外部控件的规范名称,通常可以用 ControllerInformation 来获取.
  • 默认设置 ControllerMethod->Automatic,一个控件规范(如 "X")的意思是:一个控件的位移,例如游戏操纵杆默认是由相应的变量 x 的变化率决定的. 如果选中了一个不同的状态,例如通过松开游戏操纵杆,控件的绝对位置直接决定 x 的值.
  • 在诸如 "XAbsolute" 的控件规范下,一个控件的绝对位置例如一个游戏操纵杆决定了相应的变量 x 的值.
  • 在诸如 "XCyclic" 的控件规范下,当控件到达范围的最后,相应的变量 x 的值通常从头开始循环.
  • 诸如 "XYZ" 的控件规范可能与外部设备上的很多控件相关联,例如单个控件上的两个截然不同的游戏操纵杆上的轴.
  • 在有两个操纵杆的游戏面板或其它设备上,"XY1" 通常是指左边的操纵杆,"XY2" 通常是指右边的操纵杆. 如果游戏面板上有一个帽子控制,通常指的是 "XY3".
  • 按钮控件规范,例如 "B1",每当对应的按钮被压下时,它就在 TrueFalse 之间切换.
  • 绝对规范,例如 "B1Absolute",当按下按钮时为 True 否则为 False.
  • BaseStyleLabelStyle 的设置可以作为当前样式表中 "Manipulate""ManipulateLabel" 提供的默认样式的补充.

范例

打开所有单元关闭所有单元

基本范例  (4)

操纵一个连续参数:

用离散步骤中操纵一个参数:

操纵两个参数:

给出参数的默认值和名称:

范围  (29)

内容  (6)

操纵任何类型的内容包括数字:

公式:

程序:

二维图形:

三维图形:

控件:

控件  (12)

使用一组标准控件,包括 Checkbox

SetterBar

每个元素有标签的 SetterBar

Locator

多个 Locator 对象:

多个自定义外观样式的 Locator 对象:

多个不可见 Locator 对象,对图形进行更多的编辑:

允许用 Click 创建其它的定位器:

Slider2D

InputField

IntervalSlider:

ColorSlider

使用任意数量的控件:

使用诸如 Row 或者 Grid 结构体中的 Control 以任意方式对控件进行布局:

使用 ControlType 指定控件类型:

用一个纯函数输出一个普通的控件类型:

将单个变量与多个控件连接:

演示  (8)

对单个控件,使用默认值和注解:

以任何类型的表达式作为注解,包括排版和图形:

使用动态更新的注解:

DelimiterItem 等将 Manipulate 控件分组:

使用 ControlPlacement 放置单个控件:

同时使用 ControlPlacement 和注解元素:

使用动态更新的注解:

标注可包含 Control 对象或者其它布局结构体:

控件设备  (3)

在默认情况下,当控件被选中时,它只影响一个 Manipulate;使用 All 可以对这个设置进行覆盖:

ControllerPath 指定使用的控件类别:

ControllerMethod 设置为 "Absolute",强制它为绝对关联而不是相对的:

推广和延伸  (2)

当改变参数时,您能交互旋转三维图形:

建立一个变量的定位器:

选项  (68)

Alignment   (1)

用预设值:

Apperance element   (2)

在默认情况下,Manipulate 仅包含一个 Manipulator

AppearanceElements 指定显示更多的控制:

AutoAction  (2)

在默认情况下,值不发生变化直到点击滑尺区域:

设置 AutoAction,当鼠标指向滑尺区域时值发生改变:

AutorunSequencing  (4)

通过选择控制菜单中的自动运行项,每个变量自动运行:

AutorunSequencing 来控制自动运行时变量的顺序:

为每个变量指定不同持续时间(默认为5):

指定 All 同时运行所有变量:

BaselinePosition  (1)

与周围的文本对齐:

ContentSize  (1)

指定一个固定的内容大小,若有需要可以显示滚动条:

ContinuousAction  (3)

在默认情况下,变量持续更新:

设置 ContinuousActionFalse 时,仅在释放控制时才更新:

设置成 None 则不更新内容知道更新按钮被单击:

ControllerLinking  (5)

在默认情况下,当选择对象时,输出相应一个外部控制器:

Full 使输出仅响应在当前的选择中的对象:

All 使输出总是响应外部控制器:

True 使输出响应当前强调的笔记本:

False 使输出永远不响应外部控制:

ControllerMethod  (2)

在默认情况下,变量与控制器设备上相应的控制关联:

设置 ControllerMethod"Absolute" 强制为绝对联合而不是相对联合:

ControllerPath  (6)

默认情况下,Manipulate 响应所有支持的控制中第一个控制器:

"Gamepad" 指定一个控制器,通常包括两个模拟控制:

"Joystick" 指定一个控制器,通常包括一个主要模拟控制:

"Multi-Axis Controller" 作为控制器,类似空间鼠标:

"Detachable" 指定一个不在计算机内部的控制器:

"BuiltIn" 指定一个计算机内部的控制器:

ControlPlacement  (2)

指定控制器的位置:

ControlPlacement 也影响注释,不论它们是否包含 Control 对象:

ControlType  (11)

在默认情况下,Manipulate 选择一个 Manipulator 来控制指定变量:

ControlType 指定所使用的控制的类型,包括 None

SliderVerticalSlider

Slider2DLocator

RadioButtonSetterCheckboxPopupMenu

ColorSetterColorSlider

InputField

分别为每个 Manipulate 变量指定控制类型:

ControlType 可以和单个变量的控制规则相结合:

ControlType 以相同方式影响由 Control 指定的控件:

Automatic 设置中,选择一个适当的控制器:

Deinitialization  (1)

Manipulate 不显示时,用 Deinitialization 计算表达式:

Deployed  (2)

在默认情况下,内容和控制是交互的:

使用 Deployed 限制控制的交互:

ExcludedContexts  (1)

默认情况下,某些系统内部的上下文没有被保存在初始化选项中:

ExcludedContexts{} 保存所有非保护符号的定义:

FrameLabel  (3)

在底部指定一个标签:

在底部和左边指定不同的标签:

每一边指定标签:

FrameMargins  (2)

对于内容区域周围的边幅,使用预设值:

或使用具体值:

ImageMargins  (2)

使用符号值:

或使用具体值:

IncludedContexts  (1)

将符号定义的递归包含限制在上下文 "c1`""c2`" 中:

Initialization  (1)

对于 Manipulate 输出,用 Initialization 来指定的计算必要性:

LabelStyle  (3)

为标签指定样式细节:

使用混合样式:

框架标签的样式受到 LabelStyle 的影响:

LocalizeVariables  (2)

在默认情况下,变量为局部变量:

通过设置 LocalizeVariables,变量被视为全局变量:

Paneled  (1)

指定面板内的输出是否可以换行:

RotateLabel  (1)

指定框架标签是否在垂直位置上旋转:

SaveDefinitions  (2)

默认情况下,外部定义在核心进程间丢失:

设置 SaveDefinitionsTrue,外部定义和输出一起保存:

SynchronousInitialization  (2)

在默认情况下,初始化是同步进行的:

指定非同步的初始化:

SynchronousUpdating  (2)

使用默认计算,5 秒钟后会超时:[排除程序缺陷]

通过设置 SynchronousUpdating 不可用,计算不会超时:

TrackedSymbols  (1)

指定用作更新的符号:

UndoTrackedVariables  (1)

指定局部变量,当变化时,响应 Undo 菜单指令:

应用  (3)

定义一个运行表:

操纵 +,×,-,÷ 的运行表:

一个图形对象的普通线性变化:

通过交互式操纵初始值,求解一个边界值的问题:

属性和关系  (5)

使用 InputForm 获取 Manipulate 的输入:

具体对象的 InputForm 也可以反映当前的状态:

输出时设置 Setting 来访问显示表达式:

使用 Dynamic 来进行局部更新,避免整个表达式的更新:

设置 Appearance->"Open" 来显示所有 Manipulator 控制:

使用 IntervalSlider 选项改变控件的行为:

可能存在的问题  (6)

当操纵结构图时,PlotRange 会发生改变和重置大小:

使用一个固定的 PlotRange 避免重置大小:

当操纵结构图时,标记大小会发生改变和重置大小:

使用固定的 PlotRangeImagePadding 避免重置大小:

Manipulate注意明确的可见参数:

参数 a 没有明确显示在 f

重新定义 f 来明确地包括参数 a

Manipulate 可以支持任意数目的 Locator 控件,只要每个控件的初始值是单个点:

如果 Manipulate 包含初始值是点列表的 Locator 控件,那么 Manipulate 不可以包含其他 Locator 控件:

在相同的 Manipulate 中混合单点定位器和多点定位器将产生一条警告信息:

默认情况下,不会引入附加到 "System`" 符号上的定义:

ExcludedContexts{} 从所有上下文中提取定义:

或者,将定义附加到自己的符号:

产生其他输出(如消息)的计算有时会将消息显示到消息笔记本中:

巧妙范例  (4)

操纵来自点负荷的静电势能:

创建一个简单的多面体属性浏览器:

可视化显示线性微分方程 的解:

创建数目可变化的控件:

Wolfram Research (2007),Manipulate,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Manipulate.html (更新于 2024 年).

文本

Wolfram Research (2007),Manipulate,Wolfram 语言函数,https://reference.wolfram.com/language/ref/Manipulate.html (更新于 2024 年).

CMS

Wolfram 语言. 2007. "Manipulate." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2024. https://reference.wolfram.com/language/ref/Manipulate.html.

APA

Wolfram 语言. (2007). Manipulate. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/Manipulate.html 年

BibTeX

@misc{reference.wolfram_2024_manipulate, author="Wolfram Research", title="{Manipulate}", year="2024", howpublished="\url{https://reference.wolfram.com/language/ref/Manipulate.html}", note=[Accessed: 24-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_manipulate, organization={Wolfram Research}, title={Manipulate}, year={2024}, url={https://reference.wolfram.com/language/ref/Manipulate.html}, note=[Accessed: 24-November-2024 ]}