【MATLAB随笔】GUI编程(未完结)

一、创建GUI图窗

跟很多GUI编程一样的,先创建一个基本的图窗,然后再添加按钮、文章、标签,绑定函数等等,比如python的tkinter

MATLAB常用的绘图函数,如plot,就是一个最基础的GUI界面。

MATLAB的GUI编程可以使用figure函数实现,也可以使用uifigure函数实现。

  • figure函数创建的是传统的图形窗口;
  • uifigure函数创建的是用于构建用户界面的图窗,这是App设计工具使用的图窗类型。

两种函数都可以设置图窗的属性,如名称、位置、大小、样式等。figure函数还可以返回图窗的句柄,用于后续的操作。

1.1 使用figure 函数

该函数很常用,用以新建一个图窗,比如你要画多幅图像(不在一个图窗展示)时。

figure(2)
x=-pi:0.1:pi;
y = sin(x);
plot(x,y,'b-*');
grid minor;

在这里插入图片描述

figure函数语法格式:

  • figure :使用默认属性值创建一个新的图窗窗口。生成的图窗为当前图窗。
  • figure(Name,Value) :使用一个或多个名称-值对组参数修改图窗的属性。例如,figure(‘Color’,‘white’) 将背景色设置为白色。
  • f = figure(___) :返回 Figure 对象。可使用 f 在创建图窗后查询或修改其属性。
  • figure(f) :将 f 指定的图窗作为当前图窗,并将其显示在其他所有图窗的上面。
  • figure(n) :查找 Number 属性等于 n(数字) 的图窗,并将其作为当前图窗。如果不存在具有该属性值的图窗,MATLAB将创建一个新图窗并将其 Number 属性设置为 n。

当前图窗:
当前图窗是图形命令(如 axes 和 colormap)的目标。通常情况下,它是最后创建的或最后用鼠标点击的图窗。gcf 命令返回当前图窗。


figure 属性(名称-之对组参数):

来源于MATLAB的帮助文档,本文包含了大部分内容,完整的自己看就OK。

在进行GUI编程时,通常会手动设置窗口的一下属性,用以控制图窗的外观和行为。

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在单引号 (’ ') 中。可以指定多个名称-值对组参数,如 Name1,Value1,…,NameN,ValueN。 (部分属性也能用等号赋值)

图窗是图或用户界面组件的容器。图窗属性控制特定图窗实例的外观和行为。要修改图窗的各个方面,请更改属性值。使用圆点表示法查询和设置属性。

f = figure;
u = f.Units;
f.Units = 'inches';

1.11 窗口标识

(1) Name — 名称

'' (默认) | 字符向量 | 字符串标量

图窗的名称,指定为字符向量或字符串标量。
示例: figure('Name','Results') 将图窗的名称设置为 ‘Results’。

默认情况下,名称为 ‘Figure n’,其中 n 是整数。如果指定 Name 属性,图窗的标题将变为 ‘Figure n: name’。如果你希望只显示 Name 值,请将 IntegerHandle 或 NumberTitle 设置为 ‘off’。(这2个属性后面讲)

在这里插入图片描述

图窗名称字体和位置应该是不能修改的。

(2)Number — 数字:

此 属性 为只读。窗口的数字标识符是MATLAB自动生成的,通常从1开始按顺序分配。如果你想要获取或设置窗口的句柄,可以使用输出参数方式获取。

图窗的编号,以整数或空数组形式返回。可以使用该值表示图窗。例如,figure(2) 使 Number 属性值为 2 的图窗成为当前图窗。

如果 IntegerHandle 属性设置为 ‘off’,则 Number 属性为空。

如果 IntegerHandle 为 ‘on’,则 Number 属性是整数。删除该图窗时,MATLAB 会对下一个图窗重用该编号。

这样写是错误的:不能修改当前窗口的编号。

hFig = figure('Number', 1);

这样写实正确的:激活编号为10086的窗口,并在上面进行其它操作。

hFig = figure(10086);

拓展:找到某个编号的窗口,查询和修改其其它属性

figure('Name','sin(x)图像','NumberTitle','on')
x=-pi:0.1:pi;
y = sin(x);
plot(x,y,'b-*');
grid minor;

hFig = findobj('Type', 'figure', 'Number', 1);
hFig.Name
hFig.Name='New Name';

在这里插入图片描述

(3)NumberTitle — 使用带编号的标题:

'on' (默认) | on/off 逻辑值

带编号的标题,指定为 ‘on’ 或 ‘off’,或者指定为数值或逻辑值 1 (true) 或 0 (false)。值 ‘on’ 等效于 true,‘off’ 等效于 false。因此,可以使用此属性的值作为逻辑值。该值存储为 matlab.lang.OnOffSwitchState 类型的 on/off 逻辑值。

将此属性设置为 ‘on’ 时,图窗的标题会包含短语 ‘Figure n’,其中 n 是属性 Number 的值。

NumberTitle 和 IntegerHandle 必须都设置为 ‘on’ 才能显示标题中的编号。

(4)IntegerHandle — 使用整数句柄:

'on' (默认) | on/off 逻辑值

使用整数句柄,指定为 ‘on’ 或 ‘off’,或者指定为数值或逻辑值 1 (true) 或 0 (false)。值 ‘on’ 等效于 true,‘off’ 等效于 false。因此,可以使用此属性的值作为逻辑值。该值存储为 matlab.lang.OnOffSwitchState 类型的 on/off 逻辑值。

如果将 IntegerHandle 属性设置为 ‘on’,则 MATLAB 会查找现有图窗不使用的最小整数值并将 Number 属性设置为该值。如果删除某图窗,MATLAB 可以将原图窗的编号用于新图窗。

如果将 IntegerHandle 属性设置为 ‘off’,则 MATLAB 不会为图窗分配整数值,而是会将 Number 属性设为空数组。

要在标题栏中显示图窗编号,IntegerHandle 和 NumberTitle 必须设置为 ‘on’。

(5)FileName — 文件名:

字符向量 | 字符串标量

用于保存图窗的文件名,指定为字符向量或字符串标量。GUIDE 使用该属性存储它保存的 UI 布局文件的名称。

示例: figure('FileName','myfile.fig') 将文件名设置为 myfile.fig。
在这里插入图片描述

(6)Type — Figure 对象的类型:

'figure'

此 属性 为只读。

Figure 对象的类型,以 ‘figure’ 形式返回。使用该属性在绘制层次结构中查找指定类型的所有对象。
比如我前面写过一句:hFig = findobj('Type', 'figure', 'Number', 1);

(7)UserData — 用户数据:

[] (默认) | 数组

用户数据,指定为任何数组。指定 UserData 对在 App 内共享数据很有用。相当于图窗中的全局变量。通过 UserData,你可以将任意数据关联到图窗,而不必将其存储在工作空间中,使得数据更加与图窗相关联。

figure('UserData', ones(1,5));

在这里插入图片描述

1.12 窗口外观

(1)Color — 背景色:

RGB 三元组 | 十六进制颜色代码 | 'r' | 'g' | 'b' | ...

背景颜色,指定为 RGB 三元组、十六进制颜色代码、颜色名称或短名称。如果指定 ‘none’,背景色将在屏幕上显示为黑色,但如果打印图窗,则会将图窗窗口视为透明而打印背景。

对于自定义颜色,请指定 RGB 三元组或十六进制颜色代码。

RGB 三元组是包含三个元素的行向量,其元素分别指定颜色中红、绿、蓝分量的强度。强度值必须位于 [0,1] 范围内,例如 [0.4 0.6 0.7]。

十六进制颜色代码是字符串标量或字符向量,以井号 (#) 开头,后跟三个或六个十六进制数字,范围可以是 0 到 F。这些值不区分大小写。因此,颜色代码 “#FF8800” 与 “#ff8800”、“#F80” 与 “#f80” 是等效的。

此外,还可以按名称指定一些常见的颜色。下表列出了命名颜色选项、等效 RGB 三元组和十六进制颜色代码。

颜色名称短名称RGB 三元组十六进制颜色代码外观
"red""r"[1 0 0]"#FF0000"Sample of the color red
"green""g"[0 1 0]"#00FF00"Sample of the color green
"blue""b"[0 0 1]"#0000FF"Sample of the color blue
"cyan""c"[0 1 1]"#00FFFF"Sample of the color cyan
"magenta""m"[1 0 1]"#FF00FF"Sample of the color magenta
"yellow""y"[1 1 0]"#FFFF00"Sample of the color yellow
"black""k"[0 0 0]"#000000"Sample of the color black
"white""w"[1 1 1]"#FFFFFF"Sample of the color white
"none"不适用不适用不适用无颜色

自己找个RGB颜色表的网站,复制需要的颜色十六进制值就行了。
在这里插入图片描述

(2)MenuBar — Figure 菜单栏显示方式:

'figure' (默认) | 'none'

Figure 菜单栏显示方式,指定为 ‘figure’ 或 ‘none’。MenuBar 属性用于在图窗窗口顶部显示或隐藏默认菜单。指定 ‘figure’ 可显示菜单栏。指定 ‘none’ 将其隐藏。

此属性仅影响默认菜单,不影响通过 uimenu 命令定义的菜单。

在这里插入图片描述

WindowStyle 属性设置为 ‘Modal’ 的图窗中,不显示菜单栏。如果一个含有 uimenu 子菜单项的图窗更改为 ‘Modal’,则子菜单项仍然存在于图窗的 Children 属性中。但是,在 WindowStyle 设置为 ‘Modal’ 时,这些菜单不会显示出来。

(3)ToolBar — Figure 工具栏显示:

'auto' (默认) | 'figure' | 'none'

Figure 工具栏显示方式,指定为下列值之一:

  • auto’ - 使用和 MenuBar 属性相同的值。
  • figure’ - 显示工具栏。
  • none’ - 不显示工具栏。

此属性仅影响默认工具栏。它不影响其他工具栏,例如相机工具栏或绘图编辑工具栏。从图窗视图菜单选择图窗工具栏时,会将此属性设置为 ‘figure’。
在这里插入图片描述

工具栏不在 WindowStyle 属性设置为 ‘Modal’ 的图窗中显示。如果一个含有工具栏的图窗变为 ‘Modal’,则工具栏子菜单项仍将存在于图窗的 Children 属性中。但是,在 WindowStyle 设置为 ‘Modal’ 时,工具栏不会显示出来。

1.13 位置和大小

(1) Position — 可绘制区域的位置和大小:

 [left bottom width height]

可绘制区域的位置和大小,指定为 [left bottom width height] 形式的向量。此区域不包括图窗边框、标题栏、菜单栏和工具栏。

Position 向量中的每个元素。

元素描述
left从主画面左边缘到窗口的内部左边缘的距离。在具有多个监视器的系统上,此值可能为负数。 如果图窗已停靠,则此值相对于 MATLAB 桌面中的“图窗”面板。
bottom从主画面下边缘到窗口的内部下边缘的距离。在具有多个监视器的系统上,此值可能为负数。 如果图窗已停靠,则此值相对于 MATLAB 桌面中的“图窗”面板。
widthfigure 的左右内部边缘之间的距离。
height窗口的上下内部边缘之间的距离。

所有测量值都采用 Units 属性指定的单位。图窗停靠时不能指定图窗的 Position 属性。

在 MATLAB Online (MATLAB的在线版,也挺好用的)中,Position 向量的 bottomleft 元素被忽略。

要放置包括边框、标题栏、菜单栏和工具栏在内的整个窗口,请使用 [OuterPosition]属性(后面即将说到)。

注意

Windows 操作系统会强制应用最小窗口宽度和最大窗口大小。如指定的图窗尺寸超出这些限制,将按照这些限制而不是指定的尺寸显示图窗。

此属性值等同于属性InnerPosition — 可绘制区域的位置和大小:可绘制区域的位置和大小,指定为 [left bottom width height] 形式的向量。此区域不包括图窗边框、标题栏、菜单栏和工具栏。所有测量值都采用 Units 属性指定的单位。

(2)Units— 测量单位 :

'pixels' (默认) | 'normalized' | 'inches' | 'centimeters' | 'points' | 'characters'

测量单位,指定为下表中的值之一。

单位值描述
'pixels'(默认值)像素。从 R2015b 开始,以像素为单位的距离不再依赖 Windows 和 Macintosh 系统上的系统分辨率:在 Windows 系统上,一个像素是 1/96 英寸。在 Macintosh 系统上,一个像素是 1/72 英寸。在 Linux 系统上,一个像素的大小由系统分辨率确定。
'normalized'这些单位依据父容器进行归一化。容器的左下角映射到 (0,0),右上角映射到 (1,1)
'inches'英寸。
'centimeters'厘米。
'points'磅。1 磅等于 1/72 英寸。
'characters'这些单位基于图形根对象的默认 uicontrol 字体:字符宽度 = 字母 x 的宽度。字符高度 = 两个文本行的基线之间的距离。要访问默认的 uicontrol 字体,请使用 get(groot,'defaultuicontrolFontName')set(groot,'defaultuicontrolFontName')

MATLAB 从父对象的左下角测量所有单位。

此属性会影响 Position 属性。如果更改 Units 属性,请考虑在完成计算后将其值还原为默认值,以免影响采用默认值的其他函数。

指定 UnitsPosition 属性的顺序具有以下影响:

  • 如果在 Position 属性之前指定 Units,则 MATLAB 会使用指定的单位来设置 Position
  • 如果在 Position 属性之后指定 Units 属性,则 MATLAB 会使用默认的 Units 来设置 position。然后,MATLAB 将 Position 值转换为以你指定的单位表示的等价值。

例:下面的图窗将显示在屏幕中央,大小是屏幕面积的 1 4 \frac{1}{4} 41

f = figure('Name','sin(x)图像','Color','#E6E6FA','MenuBar','none','ToolBar','figure','Units','normalized','Position',[0.25 0.25 0.5 0.5]);

(3)OuterPosition — 外部边界的位置和大小:

 [left bottom width height]

外部边界的位置和大小,指定为 [left bottom width height] 形式的向量。此属性定义由图窗的外部边界围起的区域(包括边框、标题栏、菜单栏和工具栏)。

图窗停靠时不能指定图窗的 OuterPosition 属性。

同样的,最大最小值受到系统限制。

(4)Resize — 可调整大小的图窗:

'on' (默认) | on/off 逻辑值

可调整大小的图窗,指定为 ‘on’ 或 ‘off’,或者指定为数值或逻辑值 1 (true) 或 0 (false)。值 ‘on’ 等效于 true,‘off’ 等效于 false。
当此属性设置为 ‘on’ 时,则可调整图窗大小。否则将无法调整其大小。

1.14 绘图

(1)Colormap — 图窗坐标区内容的颜色图:

parula (默认) | 由 RGB 三元组组成的 m×3 数组

图窗坐标区内容的颜色图,指定为由 RGB(红色、绿色、蓝色)三元组组成的 m×3 数组,这些三元组定义 m 种单独的颜色。

示例: figure('Colormap',[1 0 1; 0 0 1; 1 1 0]) 将颜色图设置为三种颜色:品红色、蓝色和黄色。

MATLAB 按行号访问这些颜色。

颜色图会影响由 surface、image 和 patch 函数创建的对象的渲染,但通常不会影响其他图形对象。

如果您设置了图窗的 Colormap 属性,图窗中的坐标区和图将使用相同的颜色图。

通常不这么使用这个属性,它用来设置一些三维图和部分二维图形的颜色映射,常见用法:

figure();
surf(peaks);  % 以 peaks 数据为例
colormap(cool);  % 设置颜色映射为 cool
colorbar;  % 显示颜色条

常见的预定义颜色映射包括:

  • jet:彩虹颜色映射。
  • hsv:表示色调、饱和度和明度的颜色映射。
  • gray:灰度颜色映射。
  • hot:渐变的红色和黄色。
  • cool:渐变的蓝色和青色。
  • 等等…

彩虹色散点图示例:

在这里插入图片描述

(2)Alphamap — Axes 内容的透明度映射:

由从 0164 个值组成的数组 (默认) | 由从 01 的有限 alpha 值组成的数组

Axes 内容的透明度映射,指定为从 0 到 1 线性递增的有限 alpha 值数组。数组大小可以是 m×1 或 1×m。MATLAB 按 alpha 值在数组中的索引访问它们。Alphamap 可以为任意长度。

Alphamap 会影响由 surface、image 和 patch 函数创建的对象的渲染,但不会影响其他图形对象。

如果设置了图窗的 Alphamap 属性,图窗中的坐标区和图将使用相同的 alpha 映射。

1.15 交互性

(1)Visible — 可见性状态:

'on' (默认) | on/off 逻辑值

可见性状态,指定为 ‘on’ 或 ‘off’,或者指定为数值或逻辑值 1 (true) 或 0 (false)。值 ‘on’ 等效于 true,‘off’ 等效于 false。

  • ‘on’ - 显示对象。

  • ‘off’ - 隐藏对象而不删除它。仍然可以访问不可见 UI 组件的属性。

要使 App 更快地启动,请将不需要在启动时出现的所有组件的 Visible 属性设置为 ‘off’。

更改不可见的容器的大小将在该容器变得可见时触发 SizeChangedFcn 回调。

更改容器的 Visible 属性不会改变其子组件的 Visible 属性值。即使隐藏容器会导致子组件隐藏也是如此。


还有很多回调相关的属性,这里暂时不展开了,自己看MATLAB帮助。

1.2 使用uifigure函数

二、 添加GUI控件

2.1 uicontrol(适用于figure)

基本语法:

  • c = uicontrol 在当前图窗中创建一个普通按钮(默认用户界面控件),并返回 UIControl 对象。如果图窗不存在,则 MATLAB 调用 figure 函数以创建一个图窗。
  • c = uicontrol(Name,Value) 创建一个用户界面控件,其中包含使用一个或多个名称-值对组参数指定的属性值。例如,‘Style’,‘checkbox’ 会创建一个复选框。
  • c = uicontrol(parent) 在指定的父容器中创建默认用户界面控件,而不是默认为在当前图窗中。
  • c = uicontrol(parent,Name,Value) 指定用户界面控件的父容器和一个或多个名称-值对组参数。
  • uicontrol(c) 将焦点放在一个以前定义的用户界面控件上。

接下来介绍控制的常用属性:

2.11 控件类型

(1)Style — UIControl 的样式:

'pushbutton' (默认) | 'togglebutton' | 'checkbox' | 'radiobutton' | ...

UIControl 对象的样式,指定为下表中的值之一。

样式属性值示例描述
'pushbutton'Push button按钮,释放鼠标按键前显示为按下状态的按钮。
'togglebutton'Selected toggle button Cleared toggle button切换按钮,它在外观上类似于普通按钮,但在视觉上有状态指示:选中或清除。
'checkbox'Selected check box Cleared check box复选框,可以单独选择或清除的选项。
'radiobutton'Selected radio button Cleared radio button单选按钮,作为组的一部分的选项,选中它时会清除组中的其他选项。 要为一组单选按钮实现互斥行为,请将它们置于 uibuttongroup 中。
'edit'Editable text field that says, "Enter search term."文本编辑框。 要启用多行文本,请设置 MaxMin 属性以满足 Max-Min > 1
'text'Static text field that says, "Select an item below:"静态文本。通常使用静态文本行为其他用户界面控件添加标签,向用户提供信息,或指示与滑块相关联的值。 要使静态文本响应鼠标点击,请将 Enable 属性设置为 'Inactive',并使用 ButtonDownFcn 回调编写响应代码。
'slider'Slider with the thumb at the leftmost location滑块,用户沿水平或垂直滑动条移动的“滑块”按钮。按钮沿条形的位置表示指定范围内的值。
'listbox'List box with three items列表框,可从中选择一项或多项的项列表。与弹出式菜单不同,点击列表框时不会展开。 要启用多项选择,请设置 MaxMin 属性以满足 Max-Min > 1。要在可以从一个列表框中选择多项时延迟操作,您可以将完成普通按钮与该列表框相关联。然后,使用该按钮的回调来计算列表框 属性。
'popupmenu'Pop-up menu with three items弹出式菜单(也称为下拉菜单),展开以显示选项列表。关闭时,弹出式菜单指示出当前选项。如果要提供许多互斥选项,请使用弹出式菜单。

(2)Value — 当前值:

数字

当前值,指定为数字。Value 属性可用于查询或修改某些 uicontrol 的状态

Uicontrol 的样式值属性的描述
'togglebutton'抬起:Value 属性等于 Min 属性的值。按下:Value 属性等于 Max 属性的值。
'checkbox'取消选中:Value 属性更改为 Min 属性的值。选中:Value 属性更改为 Max 属性的值。
'radiobutton'取消选择:Value 属性更改为 Min 属性的值。已选择:Value 属性更改为 Max 属性的值。
'slider'Value 属性等于对应的滑块控件的值。
'listbox'Value 属性等于与列表框中的选定项对应的数组索引。值 1 对应于列表中的第一个项目。
'popupmenu'Value 属性等于与弹出式菜单中的选定项对应的数组索引。值 1 对应于弹出式菜单中的第一项。

(3)Max — 最大值:

1 (默认) | 数字

最大值,指定为数字。Max 属性影响某些 uicontrol 的表示形式:

Uicontrol 的样式值属性的描述
'togglebutton'按下切换按钮时,Value 属性更改为 Max 属性的值。
'checkbox'当选中复选框时,Value 属性更改为 Max 属性的值。
'radiobutton'当选择单选按钮时,Value 属性更改为 Max 属性的值。
'edit'MaxMin > 1 时,编辑文本框接受多行输入。否则,编辑文本框接受单行输入。MaxMin 的绝对值不影响可能的行数。只要差异大于 1,则编辑框可以包含任意行数。
'slider'Max 属性值是滑块控件的最大值,该值必须大于 Min 属性值。
'listbox'Max 属性值可帮助确定用户是否可同时选择列表框中的多个项目。如果 MaxMin > 1,则用户可以同时选择多个项目。否则,用户不能同时选择多个项目。如果设置 MaxMin 属性以允许多个选择,则 Value 属性值可以是索引向量。

(4)Min — 最小值:

0 (默认) | 数字

最小值,指定为数字。Min 属性影响某些 uicontrol 的表示形式:

Uicontrol 的样式值属性的描述
'togglebutton'抬起切换按钮时,Value 属性更改为 Min 属性的值。
'checkbox'当取消选中复选框时,Value 属性更改为 Min 属性的值。
'radiobutton'当取消选择单选按钮时,Value 属性更改为 Min 属性的值。
'edit'MaxMin > 1 时,编辑文本框接受多行输入。否则,编辑文本框接受单行输入。MaxMin 的绝对值不影响可能的行数。只要差异大于 1,则编辑框可以包含任意行数。
'slider'Min 属性值是滑块控件的最小值,该值必须小于 Max 属性值。
'listbox'Max 属性值可帮助确定用户是否可同时选择列表框中的多个项目。如果 MaxMin > 1,则用户可以同时选择多个项目。否则,用户不能同时选择多个项目。如果设置 MaxMin 属性以允许多个选择,则 Value 属性值可以是索引向量。

(5)SliderStep— 滑块控件的步长:

 [0.01 0.10] (默认) | [minorstep majorstep]

滑块控件的步长,指定为数组 [minorstep majorstep]。此属性控制当用户点击箭头按钮或滑块槽(滑块滑道)时滑块值变化的幅度:

  • minorstep 是滑块范围的最小步长,当用户点击箭头按钮时,Value 属性将依此步长增加或减少。
  • majorstep 是滑块范围的最小步长,当用户点击滑块槽时,Value 属性按此比例增加或减少。

majorstep 值大于 1 时,滑块比例不超过 100%。

minorstepmajorstep 都必须大于 1e-6,而 minorstep 必须小于或等于 majorstep

majorstep 增大时,滑块指示符变长。当 majorstep 等于 1 时,滑块指示符是槽长的一半。对于大于 1majorstep 值,滑块指示符更大。

示例:

此滑块的范围符合以下条件:MaxMin = 1。用户每按一下箭头按钮,滑块 Value 属性就更改 1%。当用户在滑块槽中点击时,该属性变化 10%。

s = uicontrol('Style','Slider','Min',0,'Max',1,'SliderStep',[0.01 0.10]);

在这里插入图片描述

2.12 文本和样式

(1)String — 要显示的文本:

字符向量 | 字符向量元胞数组 | 字符串数组 | 分类数组 | ...

要显示的文本,指定为字符向量、字符向量元胞数组、字符串数组、分类数组或以管道分隔的行向量。[Style] 属性指示可以使用的数组格式。

在这里插入图片描述

注意

如果为普通按钮、切换按钮、复选框或单选按钮指定元胞数组或分类数组,则 MATLAB 仅显示数组中的第一个元素。

(2)ForegroundColor — 文本颜色:

[0 0 0] (默认) | RGB 三元组 | 十六进制颜色代码 | 'r' | 'g' | 'b' | ...

这个不用多说了。

(3)BackgroundColor — 背景色:

[.94 .94 .94] (默认) | RGB 三元组 | 十六进制颜色代码 | 'r' | 'g' | 'b' | ...

还有一个属性叫ForegroundColor,即前景色,比如一个text控件,可以用这个属性设置字体的颜色。

2.13 字体

(1)FontName — 字体名称:

系统支持的字体名称 | 'FixedWidth'

字体名称,指定为系统支持的字体名称或 ‘FixedWidth’。默认字体取决于具体操作系统和区域设置。

要使用在任何区域设置中都有较好显示效果的等宽字体,请指定 ‘FixedWidth’。使用的实际等宽字体取决于根对象的 FixedWidthFontName 属性。更改 FixedWidthFontName 属性会导致立即更新显示方式以使用新字体。

Windows字体位置:C:\Windows\Fonts,在任意字体是右键,属性,xxx.TTF ,xxx就是这个字体的名称,比如:

字体名称对应字体
Deng等线 常规
Dengb等线 粗体
Dengl等线 细体
simfang仿宋 常规
simhei黑体 常规
STCAIYUN华文彩云 常规
STKAITI华文楷体 常规
STXINGKA华文行楷 常规
simkai楷体 常规
simsun宋体 常规
msyh微软雅黑 常规
msyhbd微软雅黑 粗体
timesTimes New Roman常规
timesbdTimes New Roman粗体
timesbiTimes New Roman粗斜体
timesiTimes New Roman斜体

要让文字正常显示,需要安装该字体,且该字体支持显示对应文字。这在MATLAB、python绘图中是常见小问题。

(2)FontSize — 字体大小:

正数

字体大小,指定为正数。FontUnits 属性指定单位。默认大小与系统相关。

(3)FontWeight — 字体粗细:

'normal' (默认) | 'bold'

字体粗细,指定为下表中的值之一。

  • ‘normal’ - 特定字体定义的默认粗细

  • ‘bold’ - 字符轮廓比普通字符粗

MATLAB 使用 FontWeight 属性从系统提供的字体中选择一种字体。并非所有字体都有加粗字体。因此,指定加粗字体仍可能得到普通字体。

(4)FontAngle — 字体角度:

'normal' (默认) | 'italic'

字体角度,指定为 ‘normal’ 或 ‘italic’。MATLAB 根据此属性从系统上的可用字体中选择一种字体。将此属性设置为 ‘italic’ 可选择字体的倾斜版本(如果系统上提供了该字体)。

(5)FontUnits — 字体单位:

'points' (默认) | 'normalized' | 'inches' | 'centimeters' | 'pixels'

字体单位,指定为下表中的值之一。

单位值描述
'points'磅。1 磅等于 1/72 英寸。
'normalized'归一化值,将字体大小指定为高度的一定比例。当您调整 UI 组件的大小时,MATLAB 会缩放显示的字体以保持该比例。
'inches'英寸。
'centimeters'厘米。
'pixels'像素。从 R2015b 开始,以像素为单位的距离不再依赖 Windows® 和 Macintosh 系统上的系统分辨率:在 Windows 系统上,一个像素是 1/96 英寸。在 Macintosh 系统上,一个像素是 1/72 英寸。在 Linux® 系统上,一个像素的大小由系统分辨率确定。

例:
在这里插入图片描述

2.14 交互性

(1)Visible — 可见性状态:

'on' (默认) | on/off 逻辑值

可见性状态,指定为 ‘on’ 或 ‘off’,或者指定为数值或逻辑值 1 (true) 或 0 (false)。值 ‘on’ 等效于 true,‘off’ 等效于 false。

  • ‘on’ - 显示对象。

  • ‘off’ - 隐藏对象而不删除它。您仍然可以访问不可见 UI 组件的属性。

要使 App 更快地启动,请将不需要在启动时出现的所有 UI 组件的 Visible 属性设置为 ‘off’。

(2)Enable — 用户界面控件的工作状态:

'on' (默认) | 'off' | 'inactive'

用户界面控件的工作状态,指定为 ‘on’、‘off’ 或 ‘inactive’。Enable 属性控制用户界面控件是否响应用户交互。以下是可能的值:

  • ‘on’ - 用户界面控件处于工作状态。

  • ‘off’ - 用户界面控件未处于工作状态,并且呈灰显。

  • ‘inactive’ - 用户界面控件未处于工作状态,但外观与 Enable 设置为 ‘on’ 时相同。

(3)Tooltip — 工具提示:

字符向量 | 字符串标量 | 分类数组

工具提示,指定为字符向量、字符串标量或分类数组。如果使用此属性,则在运行时当用户将指针悬停在组件上时,将显示消息。禁用组件时,不显示工具提示。如果将此属性指定为分类数组,MATLAB 将使用数组中的值,而不是完整的类别集。

要创建多行文本,请使用 sprintf 函数在文本中插入换行符 (‘\n’)。例如:

txt = sprintf('Line 1\nLine 2');

然后将 Tooltip 属性设置为 sprintf 返回的值。
在这里插入图片描述

2.15 位置

(1)Position — 位置和大小:

[left bottom width height]

Position 值相对于父容器的可绘制区域。可绘制区域是指容器边框内的区域,不包括标题所占的区域。如果父容器是一个图窗,可绘制区域还不包括菜单栏和工具栏。

该属性值,等效于InnerPositionOuterPosition ,这和figure的属性不同。测量单位也是Units这个属性,不介绍了。

(2)Extent — 外围矩形的大小:

四元素行向量

此 属性 为只读。

外围矩形的大小,以四元素行向量形式返回。向量的前两个元素始终为零。第三和第四个元素分别是矩形的宽度和高度。所有测量值都采用 Units 属性指定的单位。

MATLAB 基于 String 属性值的大小和字体特征确定矩形的大小。要调整宽度和高度以适应 String 值的大小,请将 Position 宽度和高度值设置为略大于 Extent 的宽度和高度值。

对于属于单行文本的 String 值,Extent 属性的高度元素指示单行的高度。宽度元素指示最长线条的宽度,即使显示在控件上的文本换行时也是如此。对于多行文本,Extent 矩形包含所有文本行。如果 Max – Min > 1,则将可编辑的文本字段视为多行。

(3)HorizontalAlignment — uicontrol 文本的对齐方式:

'center' (默认) | 'left' | 'right'

uicontrol 文本的对齐方式,指定为 ‘center’、‘left’ 或 ‘right’。此属性确定 String 属性文本的对齐方式。

HorizontalAlignment 属性仅影响 uicontrol 的 ‘text’ 和 ‘edit’ 样式。



2.16 回调(核心)

在figure中添加各种组件(控件)后,我们通常希望它具有某些函数调用的功能,比如按下按钮应该做什么、显示什么等等。

(1)Callback — 主回调函数:

'' (默认) | 函数句柄 | 元胞数组 | 字符向量

主回调函数,指定为下列值之一:

  • 函数句柄

  • 第一个元素是函数句柄的元胞数组。元胞数组中的后续元素是传递到回调函数的参数。

  • 包含有效 MATLAB 表达式的字符向量(不推荐)。MATLAB 在基础工作区计算此表达式。

此函数将执行以响应用户交互,例如普通按钮点击、滑块移动或复选框选中。仅当 UIControl 对象的 Enable 属性设置为 ‘on’ 时(默认就是on),此函数才能执行。

有关将回调属性值指定为函数句柄、元胞数组或字符向量的详细信息,稍后介绍。

数据类型: function_handle | cell | char

(2)ButtonDownFcn — 按下鼠标按键回调函数:

'' (默认) | 函数句柄 | 元胞数组 | 字符向量

ButtonDownFcn 回调是当用户在 UI 组件上点击鼠标按键时执行的函数。回调在以下情形下执行:

  • 用户右键点击 UI 组件,并且 Enable 属性设置为 ‘on’。

  • 用户右键点击或左键点击 UI 组件,并且 Enable 属性设置为 ‘off’ 或 ‘inactive’。

(3)KeyPressFcn — 按键回调函数:

'' (默认) | 函数句柄 | 元胞数组 | 字符向量

当 UIControl 对象获得焦点并且用户按下键时执行该回调函数。如果没有为该属性定义函数,则MATLAB 向父图窗传递按键操作。重复按键操作会保留 UIControl 对象的焦点,并在每次发生按键操作时执行该函数。如果用户几乎在同一时间按下多个键,MATLAB 将检测最后一个按键的按键操作。

如果将该属性指定为函数句柄(或包含函数句柄的元胞数组),则 MATLAB 会将包含回调数据的对象作为第二个参数传递给回调函数。该对象包含下表中介绍的属性。可以使用圆点表示法访问回调函数内的这些属性。

属性描述示例:
a=ShitfShitf-a
Character作为按下一个或多个键的结果显示的字符。字符可能为空或无法打印。'a''=''''A'
Modifier包含按下的一个或多个修改键(例如 CtrlAltShift)名称的元胞数组。{1x0 cell}{1x0 cell}{'shift'}{'shift'}
Key按下的键,通过键上的(小写字母)标签或文本描述标识。'a''equal''shift''a'
Source当用户按下该键时获取焦点的对象。UIControl 对象UIControl 对象UIControl 对象UIControl 对象
EventName导致回调函数执行的操作。'KeyPress''KeyPress''KeyPress''KeyPress'

按修改键会以下列方式影响回调数据:

  • 修改键可影响 Character 属性,但不会更改 Key 属性。
  • 特定键以及使用 Ctrl 修饰的键会在 Character 属性中放置无法打印的字符。
  • CtrlAltShift 以及其他几个键不会生成 Character 属性数据。

可以查询图窗的 CurrentCharacter 属性以确定用户按下的字符。

(4)KeyReleaseFcn — 释放键回调函数:

'' (默认) | 函数句柄 | 元胞数组 | 字符向量

当 UIControl 对象获得焦点并且用户释放键时执行该回调函数。

如果将该属性指定为函数句柄(或包含函数句柄的元胞数组),则 MATLAB 会将包含回调数据的对象作为第二个参数传递给回调函数。可以使用圆点表示法访问回调函数内的这些属性。

(5)CreateFcn — 组件创建函数:

'' (默认) | 函数句柄 | 元胞数组 | 字符向量

此属性指定要在 MATLAB 创建组件时执行的回调函数。MATLAB 将在执行 CreateFcn 回调之前初始化所有的组件属性值。如果不指定 CreateFcn 属性,则 MATLAB 执行默认的创建函数。

可在CreateFcn 代码中使用 gcbo 函数获取要创建的组件对象。

对现有组件对象设置 CreateFcn 属性没有任何作用。

(6)DeleteFcn — 组件删除函数:

'' (默认) | 函数句柄 | 元胞数组 | 字符向量

DeleteFcn 属性指定要在 MATLAB 删除组件时(例如,当用户关闭窗口时)执行的回调函数。MATLAB 会在销毁组件对象的属性之前执行 DeleteFcn 回调。如果不指定 DeleteFcn 属性,则 MATLAB 执行默认的删除函数。

可在 DeleteFcn 代码中使用 gcbo 函数获取要删除的组件对象。

2.17 回调执行控件

(1)Interruptible — 回调中断:

'on' (默认) | on/off 逻辑值

回调中断,指定为 'on''off',或者指定为数值或逻辑值 1 (true) 或 0 (false)。值 'on' 等效于 true'off' 等效于 false

Interruptible 属性确定是否可以中断运行中回调。解释:

  • 运行中回调是当前正在执行的回调。
  • 中断回调是试图中断运行中回调的回调。

每当 MATLAB 调用回调时,回调都会试图中断正在运行的回调(如果存在)。运行中回调所属对象的 Interruptible 属性决定着是否允许中断:

  • 'on' 允许其他回调中断对象的回调。中断发生在 MATLAB 处理队列的下一个位置,例如当存在 drawnowfiguregetframewaitforpause 时。

    • 如果运行中回调包含以上命令之一,则 MATLAB 将在此时停止执行回调并执行中断回调。当中断回调完成时,MATLAB 将恢复执行运行中回调。
    • 如果运行中回调不包含以上命令之一,则 MATLAB 执行完当前回调,不会出现任何中断。
  • 'off' 阻止所有中断尝试。由中断回调所属的对象的 BusyAction 属性决定是放弃该中断回调还是将其放入队列中。

注意

回调的中断和执行在以下情况下会有不同的表现:

  • 如果中断回调是 DeleteFcnCloseRequestFcnSizeChangedFcn 回调,则无论是否存在 Interruptible 属性值都会发生中断。
  • 如果运行中回调当前正在执行 waitfor 函数,则无论是否存在 Interruptible 属性值都会发生中断。
  • Timer 对象根据排定时间执行,而不管 Interruptible 属性值如何。
  • 发生中断时,MATLAB 不保存属性状态或显示内容。例如,[gca]或 [gcf]命令返回的对象可能会在另一个回调执行时发生改变。

(2)BusyAction — 回调排队:

'queue' (默认) | 'cancel'

回调排队,指定为 'queue'(默认值)或 'cancel'BusyAction 属性决定 MATLAB 如何处理中断回调的执行。有以下两种回调状态要考虑:

  • 运行中回调是当前正在执行的回调。
  • 中断回调是试图中断运行中回调的回调。

中断回调的来源的 BusyAction 属性决定 MATLAB 如何处理其执行。BusyAction 属性具有下列值:

  • 'queue' - 将中断回调放入队列中,以便在运行中回调执行完毕后进行处理。
  • 'cancel' - 不执行中断回调。

无论何时 MATLAB 调用回调,该回调都会试图中断正在执行的回调。运行中回调所属对象的 Interruptible 属性确定是否允许回调。如果 Interruptible 设置为:

  • on - 在下一个时间点(MATLAB 处理队列时)发生中断。这是默认设置。
  • off - BusyAction 属性(中断回调所属对象的属性)确定 MATLAB 是将中断回调纳入队列还是将其忽略。

(3)BeingDeleted — 删除状态:

on/off 逻辑值

此 属性 为只读。

删除状态,以 matlab.lang.OnOffSwitchState 类型的 on/off 逻辑值形式返回。

当 DeleteFcn 回调开始执行时,MATLAB 会将 BeingDeleted 属性设置为 ‘on’。BeingDeleted 属性将一直保持 ‘on’ 设置状态,直到组件对象不再存在为止。

在查询或修改对象之前,请先检查其 BeingDeleted 属性的值,以确认它不是待删除项。

(4)HitTest — 变为当前对象的能力:

'on' (默认) | on/off 逻辑值

是否能够成为当前对象,指定为 ‘on’ 或 ‘off’,或者指定为数值或逻辑值 1 (true) 或 0 (false)。值 ‘on’ 等效于 true,‘off’ 等效于 false。

  • ‘on’ - 当用户点击正在运行的 App 中的组件时,将当前对象设置为 UIControl。Figure 和 gco 函数的 CurrentObject 属性都返回 UIControl 作为当前对象。

  • ‘off’ - 当用户点击正在运行的 App 中的组件时,从 UIControl 的前代中找到 HitTest 设置为 ‘on’ 的最近前代并将当前对象设置为该前代。

2.18 父级、子级

确定各个组件的层级关系。

(1)Parent — 父对象:

Figure | Panel | ButtonGroup | Tab

父对象,指定为 Figure、Panel、ButtonGroup 或 Tab 对象。使用此属性可在创建 UI 组件时指定父容器,或将现有 UI 组件移动到其他父容器中。

(2)HandleVisibility — UIControl 句柄的可见性:

'on' (默认) | 'callback' | 'off'

UIControl 句柄的可见性,指定为 'on''callback''off'

此属性控制 UIControl 句柄在其父级的子级列表中的可见性。当句柄未显示在其父对象的子对象列表中时,通过搜索对象层次结构或查询句柄属性获取句柄的函数不会返回该句柄。这些函数包括 getfindobjgcagcfgconewplotclaclfcloseHandleVisibility 属性还控制对象句柄是否显示在父图窗的 CurrentObject 属性中。句柄即使在不可见时也仍有效。如果知道对象的句柄,可以对其属性执行 set 和 get 操作并将句柄传递给处理句柄的任何函数。

HandleVisibility 值描述
'on'UIControl 句柄始终可见。
'callback'UIControl 句柄对于回调或回调调用的函数可见,但对于命令行调用的函数不可见。该选项阻止通过命令行访问 UIControl,但允许回调函数访问它。
'off'UIControl 句柄始终不可见。该选项用于防止另一函数无意中对 UI 进行更改。将 HandleVisibility 设置为 'off' 可在执行该函数时暂时隐藏句柄。

可以将图形根的 ShowHiddenHandles 属性设置为 'on' 以使所有句柄可见,而不管其 HandleVisibility 值如何。此设置对其 HandleVisibility 值没有任何影响。

注意

请勿尝试访问由 uibuttongroup 管理的按钮组外部的单选按钮和切换按钮。将这些单选按钮和切换按钮的 HandleVisibility 设置为 'off' 可防止意外访问。

简单举个例子吧,这个属性可以设置某个组件的属性是否可以通过set函数来修改:

% 创建一个按钮
hButton = uicontrol('Style', 'pushbutton', 'String', 'Click me');

% 设置 HandleVisibility 为 'on'
set(hButton, 'HandleVisibility', 'on');

% 在命令行中可以直接获取和修改按钮的属性
get(hButton, 'String');  % 可以获取按钮的文本属性
set(hButton, 'String', 'New Text');  % 可以修改按钮的文本属性

% 设置 HandleVisibility 为 'off'
set(hButton, 'HandleVisibility', 'off');

% 在命令行中无法直接获取和修改按钮的属性
% get(hButton, 'String');  % 会返回错误
% set(hButton, 'String', 'New Text');  % 会返回错误

2.19 标识符

(1)Type — 图形对象的类型:

'uicontrol'

此 属性 为只读。

图形对象的类型,以 ‘uicontrol’ 形式返回。

(2)Tag — 对象标识符

'' (默认) | 字符向量 | 字符串标量

对象标识符,指定为字符向量或字符串标量。可以指定唯一的 Tag 值作为对象的标识符。如果需要访问代码中其他位置的对象,可以使用 findobj 函数基于 Tag 值搜索对象。

(3)UserData — 用户数据

[] (默认) | 数组

用户数据,指定为任何数组。指定 UserData 对在 App 内共享数据很有用。

三、函数

MATLAB中,函数是代码的重要组成部分,它们允许用户将任务分解成更小的可管理的部分,并通过模块化的方式编写代码。

3.1 MATLAB函数的基本概念

(1) 函数的定义

函数的定义以关键字function开始,后跟输出变量、函数名和输入变量。例如:

function output = myFunction(input1, input2)
    % 函数体
    output = input1 + input2;
end

这个简单的例子定义了一个名为myFunction的函数,接受两个输入参数input1input2,并返回它们的和。

(2)函数调用

要使用函数,只需在MATLAB命令窗口或脚本中调用函数并提供必要的输入参数。例如:

result = myFunction(3, 5);
disp(result);

这将输出8,因为myFunction返回输入参数的和。

3.2 MATLAB函数的分类

MATLAB函数可以分为以下几类:

(1)内置函数

MATLAB提供了大量的内置函数,涵盖了数学、统计、图形绘制等各个领域。例如,sincosmean等都是内置函数。

x = linspace(0, 2*pi, 100);
y = sin(x);
plot(x, y);

这个例子中,linspacesinplot都是内置函数。

(2)用户自定义函数

用户可以自定义函数,以满足特定问题的需求。前面的例子中的myFunction就是一个用户自定义的函数。

(3)脚本文件

虽然不是传统的函数,但MATLAB中的脚本文件也是一种可执行的代码单元。脚本文件包含一系列按顺序执行的MATLAB命令,通常用于较简单的任务。

3.3 MATLAB函数的高级特性

(1)匿名函数

MATLAB支持匿名函数,这是一种不需要显式命名的短小函数。例如:

f = @(x) x^2 + 2*x + 1;
result = f(3);
disp(result);

(2)变长输入和输出

MATLAB函数可以接受不同数量的输入和产生不同数量的输出。这使得函数更加灵活,适应各种应用场景。

function [sum, product] = calculateSumProduct(varargin)
    sum = sum(varargin{:});
    product = prod(varargin{:});
end

四、示例

  • 25
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

感谢地心引力

有用的话请我喝杯咖啡吧????

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值