一、App Designer启动
1.打开方式
(1)打开 App 设计工具的首页
appdesigner
(2)打开现有 App 文件
appdesigner(filename)
filename:
App 文件的名称或路径,指定为字符向量或字符串标量。可以在文件名中包括 .mlapp
。一次只能将一个文件名传递给 appdesigner
函数。
如果 filename
出现在搜索路径上的多个文件夹中,请包括该文件的路径。文件指定必须使用文件的完整路径或相对路径,或者 MATLAB 路径上的文件的名称。
示例: appdesigner('app1.mlapp')
示例: appdesigner("app1")
示例: appdesigner("C:\Documents\Data\watertables.mlapp")
(3)菜单栏打开
新建——App
2.首页
在首页中可以创建新的空白 App,或者新的具有自动调整布局功能的两栏式或三栏式 App,还可以:
- 查看最近使用的 App 列表。
- 浏览精选示例以帮助快速入门。
- 参考指导教程,学习 App 设计工具的基础知识。
- 探索教程中重点介绍的 App 设计工具新功能。
二、控件
2.1 常用组件
2.1.1 下拉框
除了可以直接拖拽外,此处详注程序创建及编辑方式。
(1)程序自动生成下拉框
程序自动创建一个具有默认项目的下拉组件。
fig = uifigure;
dd = uidropdown(fig);
(2)程序创建下拉组件指定项内容。
fig = uifigure;
dd = uidropdown(fig,'Items',{'Red','Yellow','Blue','Green'},...
'Value','Blue');
(3)创建可编辑的下拉列表
fig = uifigure;
dd = uidropdown(fig,'Editable','on');
(4)属性
Value - 值
Items 的元素 | ItemsData 的元素
值,指定为 Items
或 ItemsData
数组的元素。默认情况下,Value
是 Items
中的第一个元素。
将 Value
指定为 Items
的元素,即可选择与该元素匹配的下拉项。如果 ItemsData
非空,则 Value
必须设置为 ItemsData
的元素,而下拉列表将选中列表中的关联项目。
Items - 下拉项
{'Option 1','Option 2','Option 3','Option 4'} (默认) | 字符向量元胞数组 | 字符串数组 | ...
下拉项,指定为字符向量元胞数组、字符串数组或一维分类数组。允许重复的元素。下拉组件显示的选项与 Items
数组中的元素数量一样多。如果将此属性指定为分类数组,MATLAB® 将使用数组中的值,而不是完整的类别集。
ItemsData - 与 Items 属性值的每个元素关联的数据
空数组 ([]) (默认) | 1×n 数值数组 | 1×n 元胞数组
与 Items
属性值的每个元素关联的数据,指定为 1×n 数值数组或 1×n 元胞数组。允许重复的元素。
例如,如果您将 Items
值设置为员工姓名,则可以将 ItemsData
值设置为对应的员工 ID 号。ItemsData
值对 App 用户不可见。
如果 ItemsData
值和 Items
值中的数组元素数量不匹配,将发生以下情况之一:
- 如果
ItemsData
值为空,则Items
值的所有元素都呈现给 App 用户。 - 如果
ItemsData
值中的元素数大于Items
值,则Items
值的所有元素都呈现给 App 用户。MATLAB 将忽略多余的ItemsData
元素。 - 如果
ItemsData
值非空,但元素数少于Items
值,只将在ItemsData
值中具有对应元素的Items
值的元素呈现给 App 用户。
字体和颜色(略)
交互性
Visible
属性确定下拉组件是否显示在屏幕上。如果 Visible
属性设置为 'off'
,下拉组件将隐藏,但仍然可以指定和访问它的属性。要使 App 更快地启动,请将不需要在启动时出现的所有组件的 Visible
属性设置为 'off'
。
Editable 属性值为 'on',则下拉组件文本可更改;当Enable
为 'off'
,则 App 用户不能更改下拉组件文本,即使 Editable 属性值为 'on'
也是如此。
Enable属性
- 如果您将此属性值设置为
'on'
,下拉组件的外观将指示 App 用户可以更改下拉组件值。 - 如果您将此属性值设置为
'off'
,下拉组件的外观将灰显。此外观指示 App 用户不能更改下拉组件值,而且下拉组件不会触发任何回调。
tooltips 工具提示,指定为字符向量、字符向量元胞数组、字符串数组或一维分类数组。如果使用此属性,则在运行时当用户将指针悬停在组件上时,将显示消息。即使禁用组件,工具提示也会显示。要显示多行文本,请指定字符向量元胞数组或字符串数组。数组中的每个元素变为一行文本。如果将此属性指定为分类数组,MATLAB 将使用数组中的值,而不是完整的类别集。
回调属性
Interruptible - 回调中断
'on' (默认) | 'off'
回调中断,指定为 'on'
或 'off'
。Interruptible
属性确定是否可以中断运行中回调。
有以下两种回调状态要考虑:
- 运行中回调是当前正在执行的回调。
- 中断回调是试图中断运行中回调的回调。
每当 MATLAB 调用回调时,回调都会试图中断正在运行的回调(如果存在)。运行中回调所属对象的 Interruptible
属性决定着是否允许中断。Interruptible
属性具有下列两个可能的值:
'on'
- 允许其他回调中断对象的回调。中断发生在 MATLAB 处理队列的下一个位置,例如当存在 drawnow、figure、uifigure、getframe、waitfor 或 pause 命令时。
- 如果运行中回调包含以上命令之一,则 MATLAB 将在该时刻停止执行回调并执行中断回调。当中断回调完成时,MATLAB 将恢复执行运行中回调。
- 如果运行中回调不包含以上命令之一,则 MATLAB 执行完当前回调,不会出现任何中断;
'off'
- 阻止所有中断尝试。由中断回调所属的对象的BusyAction
属性决定是放弃该中断回调还是将其放入队列中。
usyAction - 回调排队
'queue' (默认) | 'cancel'
回调排队,指定为 'queue'
或 'cancel'
。BusyAction
属性决定 MATLAB 如何处理中断回调的执行。有以下两种回调状态要考虑:
- 运行中回调是当前正在执行的回调。
- 中断回调是试图中断运行中回调的回调。
无论何时 MATLAB 调用回调,该回调都会试图中断运行中回调。运行中回调所属对象的 Interruptible
属性决定着是否允许中断。如果不允许中断,则中断回调所属对象的属性 BusyAction
将决定是放弃该回调还是将回调放入队列中。以下是 BusyAction
属性的可能值:
'queue'
- 将中断回调放入队列中,以便在运行中回调执行完毕后进行处理。'cancel'
- 不执行中断回调。
HandleVisibility - 对象句柄的可见性
'on' (默认) | 'callback' | 'off'
对象句柄的可见性,指定为 'on'
、'callback'
或 'off'
。
此属性控制对象在其父级的子级列表中的可见性。当对象未显示在其父级的子级列表中时,通过搜索对象层次结构或查询属性来获取对象的函数不会返回该对象。这些函数包括 get、findobj、clf 和 close。对象即使在不可见时也有效。如果可以访问某个对象,则可以设置和获取其属性,并将其传递给针对对象进行运算的任意函数。
(6)示例
将以下代码保存到 MATLAB 路径中的 plotOptions.m
中。以下代码将创建一个窗口,其中包含一个绘图和一个下拉组件。当 App 用户更改下拉组件选择时,ValueChangedFcn
回调将改变绘图的颜色。
function plotOptions
fig = uifigure;
fig.Position(3:4) = [440 320];
ax = uiaxes('Parent',fig,...
'Position',[10 10 300 300]);
x = linspace(-2*pi,2*pi);
y = sin(x);
p = plot(ax,x,y);
p.Color = 'Blue';
dd = uidropdown(fig,...
'Position',[320 160 100 22],...
'Items',{'Red','Yellow','Blue','Green'},...
'Value','Blue',...
'ValueChangedFcn',@(dd,event) selection(dd,p));
end
% Create ValueChangedFcn callback:
function selection(dd,p)
val = dd.Value;
p.Color = val;
end
创建一个下拉组件和一个信号灯。当 App 用户从下拉组件中选择选项时,信号灯的大小将改变。
请将以下代码保存到 MATLAB 路径中的 lampSize.m
中。以下代码将创建一个图窗窗口,其中包含一个下拉组件和一个信号灯。当 App 用户更改下拉组件选项时,ValueChangedFcn
回调将改变信号灯的大小。
function lampSize
% Create figure and components
fig = uifigure('Position',[100 100 300 275]);
lmp = uilamp(fig,...
'Position',[100 30 20 20]);
dd = uidropdown(fig,...
'Editable','on',...
'Position',[84 204 100 20],...
'Items',{'Size x 1','Size x 2','Size x 3','Size x 4'},...
'ItemsData',[1 2 3 4],...
'Value',1,...
'ValueChangedFcn',@(dd,event) optionSelected(dd,lmp));
end
% Create ValueChangedFcn callback
function optionSelected(dd,lmp)
val = dd.Value;
s = [20 20];
switch val
case {1, 2, 3, 4} % User selected a defined option
size = val * s;
lmp.Position(3:4) = size;
otherwise % User typed a value
m = str2num(val);
size = m * s;
lmp.Position(3:4) = size;
end
end
(7)其他
下拉框控件的值 Value返回的是字符串,为了使返回值变为数值型,直接用于数值运算,可以采用语句:
value=str2double(app.XX.value)