MATLAB图形用户界面:uicontextmenu与uicontrol的使用指南
1. uicontextmenu的基本介绍
1.1 用途与语法
uicontextmenu用于创建上下文菜单,即当用户在图形对象上右键单击时出现的菜单。其语法如下:
handle = uicontextmenu('PropertyName',PropertyValue,...);
1.2 描述
通过uicontextmenu创建上下文菜单后,可使用uimenu函数创建菜单项,菜单项会按照uimenu语句的顺序显示。使用对象的UIContextMenu属性并指定上下文菜单的句柄作为属性值,可将上下文菜单与对象关联起来。
1.3 属性介绍
uicontextmenu的属性按功能分组,以下是部分重要属性的介绍:
| 属性名称 | 属性描述 | 属性值 | 默认值 |
| — | — | — | — |
| Visible | 上下文菜单的可见性 | on, off | off |
| Position | 当Visible设置为on时上下文菜单的位置 | 二元向量 | [0 0] |
| Children | 为上下文菜单定义的uimenus | 矩阵 | - |
| Parent | 上下文菜单对象的父对象 | 标量图形句柄 | - |
| Tag | 用户指定的对象标识符 | 字符串 | - |
| Type | 图形对象的类 | 字符串(只读) | uicontrol |
| UserData | 用户指定的数据 | 矩阵 | - |
| BusyAction | 回调例程中断 | cancel, queue | queue |
| Callback | 控制操作 | 字符串 | - |
| CreateFcn | 对象创建期间执行的回调例程 | 字符串 | - |
| DeleteFcn | 对象删除期间执行的回调例程 | 字符串 | - |
| Interruptible | 回调例程中断模式 | on, off | on |
| HandleVisibility | 句柄是否可从命令行和GUI访问 | on, callback, off | on |
1.4 示例
以下代码定义了一个与线条关联的上下文菜单,当用户在该线条上右键单击时,菜单会出现,菜单项可让用户更改线条样式:
% 定义上下文菜单
cmenu = uicontextmenu;
% 定义线条并将其与上下文菜单关联
hline = plot(1:10, 'UIContextMenu', cmenu);
% 定义上下文菜单项的回调
cb1 = ['set(hline, ''LineStyle'', ''--'')'];
cb2 = ['set(hline, ''LineStyle'', '':'')'];
cb3 = ['set(hline, ''LineStyle'', ''-'')'];
% 定义上下文菜单项
item1 = uimenu(cmenu, 'Label', 'dashed', 'Callback', cb1);
item2 = uimenu(cmenu, 'Label', 'dotted', 'Callback', cb2);
item3 = uimenu(cmenu, 'Label', 'solid', 'Callback', cb3);
1.5 修改属性的方法
可以通过以下两种方式设置和查询图形对象的属性:
-
属性检查器
:这是一个交互式工具,可在GUIDE中使用,也可在命令行使用inspect函数。
-
set和get函数
:用于设置和查询属性值。
2. uicontrol的基本介绍
2.1 用途与语法
uicontrol用于创建用户界面控制对象,可用于实现图形用户界面。其语法有以下几种形式:
handle = uicontrol('PropertyName',PropertyValue,...)
handle = uicontrol(parent,'PropertyName',PropertyValue,...)
handle = uicontrol
uicontrol(uich)
2.2 描述
不同的语法形式有不同的作用:
-
handle = uicontrol('PropertyName',PropertyValue,...)
:创建一个uicontrol并为其分配指定的属性和值,未指定的属性将使用默认值,默认的uicontrol样式是按钮,默认父对象是当前图形。
-
handle = uicontrol(parent,'PropertyName',PropertyValue,...)
:在由句柄parent指定的对象中创建一个uicontrol,如果同时指定了不同的Parent属性值,则Parent属性的值优先,parent可以是图形、uipanel或uibuttongroup的句柄。
-
handle = uicontrol
:在当前图形中创建一个按钮,uicontrol函数会为所有属性分配默认值。
-
uicontrol(uich)
:将焦点赋予由句柄uich指定的uicontrol。
2.3 支持的样式
MATLAB支持多种样式的uicontrol,每种样式适用于不同的目的:
-
复选框(checkbox)
:选中时会触发操作,适用于为用户提供多个独立选择。
-
可编辑文本字段(edit)
:允许用户输入或修改文本值。
-
列表框(listbox)
:显示一个项目列表并允许用户选择一个或多个项目。
-
弹出菜单(popupmenu)
:按下时会打开显示一个选择列表,适用于为用户提供多个互斥选择。
-
按钮(pushbutton)
:按下时会触发操作。
-
单选按钮(radiobutton)
:类似于复选框,但在一组相关的单选按钮中是互斥的。
-
滑块(slider)
:允许用户在特定范围内输入数值。
-
静态文本标签(text)
:显示文本行,通常用于标记其他控件或提供用户说明。
-
切换按钮(togglebutton)
:点击时执行回调并指示其状态(开或关),适用于构建工具栏。
2.4 示例
示例1:创建一个按下时清除当前坐标轴的按钮
h = uicontrol('Style', 'pushbutton', 'String', 'Clear',...
'Position', [20 150 100 70], 'Callback', 'cla');
uicontrol(h)
示例2:创建一个通过弹出菜单更改图形颜色映射的uicontrol对象
hpop = uicontrol('Style', 'popup',...
'String', 'hsv|hot|cool|gray',...
'Position', [20 320 100 50],...
'Callback', 'setmap');
其中,setmap.m文件包含以下代码:
val = get(hpop,'Value');
if val == 1
colormap(hsv)
elseif val == 2
colormap(hot)
elseif val == 3
colormap(cool)
elseif val == 4
colormap(gray)
end
2.5 uicontrol的属性
uicontrol的属性也按功能分组,以下是部分重要属性的介绍:
| 属性名称 | 属性描述 | 属性值 | 默认值 |
| — | — | — | — |
| BackgroundColor | 对象背景颜色 | ColorSpec | 系统依赖 |
| CData | 显示在控件上的真彩色图像 | 矩阵 | - |
| ForegroundColor | 文本颜色 | ColorSpec | [0 0 0] |
| SelectionHighlight | 对象选中时是否高亮显示 | on, off | on |
| String | uicontrol标签,也是列表框和弹出菜单的项目 | 字符串 | - |
| Visible | uicontrol的可见性 | on, off | on |
| Enable | 启用或禁用uicontrol | on, inactive, off | on |
| Parent | uicontrol对象的父对象 | 图形、uipanel或uibuttongroup句柄 | - |
| Selected | 对象是否被选中 | on, off | off |
| SliderStep | 滑块的步长 | 二元向量 | [0.01 0.1] |
| Style | uicontrol对象的类型 | pushbutton, togglebutton, radiobutton, checkbox, edit, text, slider, listbox, popupmenu | pushbutton |
| Tag | 用户指定的对象标识符 | 字符串 | - |
| TooltipString | 对象工具提示的内容 | 字符串 | - |
| Type | 图形对象的类 | 字符串(只读) | uicontrol |
| UserData | 用户指定的数据 | 矩阵 | - |
| BusyAction | 回调例程中断 | cancel, queue | queue |
| ButtonDownFcn | 按钮按下回调例程 | 字符串或函数句柄 | - |
| Callback | 控制操作 | 字符串或函数句柄 | - |
| CreateFcn | 对象创建期间执行的回调例程 | 字符串或函数句柄 | - |
| DeleteFcn | 对象删除期间执行的回调例程 | 字符串或函数句柄 | - |
| Interruptible | 回调例程中断模式 | on, off | on |
| KeyPressFcn | 按键回调例程 | 字符串或函数句柄 | - |
| UIContextMenu | 与uicontrol关联的uicontextmenu对象 | 句柄 | - |
| ListboxTop | 列表框中显示的最顶部字符串的索引 | 标量 | [1] |
| Max | 最大值(取决于uicontrol对象) | 标量 | 对象依赖 |
| Min | 最小值(取决于uicontrol对象) | 标量 | 对象依赖 |
| Value | uicontrol对象的当前值 | 标量或向量 | 对象依赖 |
| HandleVisibility | 句柄是否可从命令行和GUI访问 | on, callback, off | on |
| HitTest | 是否可通过鼠标点击选择 | on, off | on |
2.6 总结
通过uicontextmenu和uicontrol,我们可以在MATLAB中创建丰富的图形用户界面。uicontextmenu可用于创建上下文菜单,为用户提供便捷的操作选项;uicontrol则提供了多种样式的控件,可满足不同的交互需求。在实际应用中,我们可以根据具体需求合理设置它们的属性,实现各种复杂的交互功能。
2.7 流程图
graph LR
A[uicontrol创建] --> B{选择样式}
B --> C[复选框]
B --> D[可编辑文本字段]
B --> E[列表框]
B --> F[弹出菜单]
B --> G[按钮]
B --> H[单选按钮]
B --> I[滑块]
B --> J[静态文本标签]
B --> K[切换按钮]
C --> L[设置属性]
D --> L
E --> L
F --> L
G --> L
H --> L
I --> L
J --> L
K --> L
L --> M[关联回调]
M --> N[完成创建]
以上内容详细介绍了uicontextmenu和uicontrol的基本使用方法、属性设置以及示例代码,希望能帮助大家更好地在MATLAB中创建图形用户界面。
3. uicontextmenu 属性详解
3.1 控制回调例程执行的属性
3.1.1 BusyAction
BusyAction 属性用于处理回调例程的中断情况。当一个回调正在执行,而用户触发了另一个定义了回调的对象的事件(如鼠标点击)时,新事件关联的回调会根据 BusyAction 的值来决定是否尝试中断正在执行的回调:
-
cancel
:事件将被丢弃,第二个回调不会执行。
-
queue
:如果第一个回调的 Interruptible 属性为 on,第二个回调将被添加到事件队列中,并在第一个回调执行完成后依次执行。
需要注意的是,如果中断回调是 DeleteFcn 或 CreateFcn 回调,或者是图形的 CloseRequest 或 ResizeFcn 回调,它将无视对象的 Interruptible 属性值,直接中断正在执行的回调。
3.1.2 Callback
Callback 属性定义了一个控制操作,当用户右键单击定义了上下文菜单的对象时,该例程会立即在上下文菜单显示之前执行。可以将其定义为一个有效的 MATLAB 表达式字符串或一个 M 文件的名称,表达式将在 MATLAB 工作区中执行。
3.1.3 CreateFcn
CreateFcn 属性指定的函数会在 MATLAB 创建 uicontextmenu 对象时执行。MATLAB 会在执行 CreateFcn 回调之前设置 uicontextmenu 的所有属性值,因此这些值在回调中是可用的。可以使用 gcbo 函数在回调中获取正在创建的 uicontextmenu 的句柄。
可以为所有新的 uicontextmenu 定义一个默认的 CreateFcn 回调,除非在调用 uicontextmenu 时指定了不同的 CreateFcn 回调来覆盖它。例如:
set(0,'DefaultUicontextmenuCreateFcn','set(gcbo, ''Visible'',''on'')')
此代码创建了一个默认的 CreateFcn 回调,每当创建新的上下文菜单时,它会将上下文菜单的默认 Visible 属性设置为 on。
3.1.4 DeleteFcn
DeleteFcn 属性定义了一个回调例程,当删除 uicontextmenu 对象时(例如,发出 delete 命令或清除包含 uicontextmenu 的图形),该例程会在销毁对象的属性之前执行,因此这些属性值在回调例程中是可用的。可以使用 gcbo 函数通过根 CallbackObject 属性来获取正在执行 DeleteFcn 的对象的句柄。
3.1.5 Interruptible
Interruptible 属性控制回调例程的中断模式。当一个回调正在执行,而用户触发了另一个定义了回调的对象的事件时,MATLAB 会根据以下因素处理回调:
- 正在执行回调的对象的 Interruptible 属性。
- 正在执行的回调是否包含 drawnow、figure、getframe、pause 或 waitfor 语句。
- 等待执行回调的对象的 BusyAction 属性。
如果正在执行回调的对象的 Interruptible 属性为 on(默认值),则回调可以被中断。每当回调调用 drawnow、figure、getframe、pause 或 waitfor 函数时,该函数会处理事件队列中的任何事件,包括等待的回调。
3.2 控制对象访问的属性
3.2.1 HandleVisibility
HandleVisibility 属性控制对象句柄在其父对象的子对象列表中的可见性。当句柄在其父对象的子对象列表中不可见时,通过搜索对象层次结构或查询句柄属性来获取句柄的函数(如 get、findobj、gca、gcf、gco、newplot、cla、clf 和 close)将不会返回该句柄,父图形的 CurrentObject 属性中也不会显示该句柄。但隐藏的句柄仍然有效,如果知道对象的句柄,仍然可以设置和获取其属性,并将其传递给任何处理句柄的函数。
-
on
:句柄始终可见。
-
callback
:句柄在回调例程或由回调例程调用的函数中可见,但在从命令行调用的函数中不可见。这可以保护 GUI 免受命令行用户的干扰,同时允许回调例程完全访问对象句柄。
-
off
:句柄始终不可见。当回调例程调用可能会损坏 GUI 的函数(如计算用户输入的字符串)时,可能需要将其设置为 off,以暂时隐藏其句柄。
可以将根 ShowHiddenHandles 属性设置为 on,使所有句柄可见,而不影响 HandleVisibility 属性的值。
3.3 其他属性
3.3.1 Position
Position 属性是一个二元向量,定义了通过将 Visible 属性设置为 on 来显示的上下文菜单的位置。向量元素表示从图形窗口、面板或按钮组的左下角到上下文菜单左上角的水平和垂直像素距离,格式为
[x y]
。
3.3.2 Tag
Tag 属性是用户指定的对象标签,可用于使用用户指定的标签标识图形对象。在构建交互式图形程序时,这特别有用,因为它可以避免将对象句柄定义为全局变量或在回调例程之间传递它们。可以将 Tag 定义为任何字符串。
3.3.3 Type
对于 uicontextmenu 对象,Type 属性始终是字符串
'uicontextmenu'
。
3.3.4 UserData
UserData 属性允许用户将任何数据与 uicontextmenu 对象关联起来,MATLAB 不会使用这些数据,但可以使用 set 和 get 函数访问它。
3.3.5 Visible
Visible 属性有两种用途:
- 其值指示上下文菜单当前是否显示。当上下文菜单显示时,属性值为 on;当上下文菜单未显示时,属性值为 off。
- 可以将其值设置为 on 以强制显示上下文菜单,设置为 off 以强制移除上下文菜单。在这种情况下,Position 属性决定了显示的上下文菜单的位置。
4. uicontrol 属性详解
4.1 控制样式和外观的属性
4.1.1 BackgroundColor
BackgroundColor 属性指定对象的背景颜色,其值为 ColorSpec。
4.1.2 CData
CData 属性用于在控件上显示真彩色图像,其值为矩阵。
4.1.3 ForegroundColor
ForegroundColor 属性指定文本的颜色,其值为 ColorSpec,默认值为
[0 0 0]
。
4.1.4 SelectionHighlight
SelectionHighlight 属性决定对象在被选中时是否高亮显示,值可以为 on 或 off,默认值为 on。
4.1.5 String
String 属性用于设置 uicontrol 的标签,对于列表框和弹出菜单,它还用于定义项目列表。
4.1.6 Visible
Visible 属性控制 uicontrol 的可见性,值可以为 on 或 off,默认值为 on。
4.2 控制对象位置的属性
4.2.1 Position
Position 属性是一个矩形向量,定义了 uicontrol 对象的大小和位置,默认值为
[20 20 60 20]
。
4.2.2 Units
Units 属性指定解释 Position 向量的单位,可以是 pixels、normalized、inches、centimeters、points 或 characters,默认值为 pixels。
4.3 控制字体和标签的属性
4.3.1 FontAngle
FontAngle 属性指定字符的倾斜方式,可以是 normal、italic 或 oblique,默认值为 normal。
4.3.2 FontName
FontName 属性指定字体家族,其值为字符串,默认值取决于系统。
4.3.3 FontSize
FontSize 属性指定字体大小,单位由 FontUnits 属性指定,默认值取决于系统。
4.3.4 FontUnits
FontUnits 属性指定字体大小的单位,可以是 points、normalized、inches、centimeters 或 pixels,默认值为 points。
4.3.5 FontWeight
FontWeight 属性指定文本字符的粗细,可以是 light、normal、demi 或 bold,默认值为 normal。
4.3.6 HorizontalAlignment
HorizontalAlignment 属性指定标签字符串的对齐方式,可以是 left、center 或 right,默认值取决于 uicontrol 对象。
4.4 信息相关属性
4.4.1 ListboxTop
ListboxTop 属性指定列表框中显示的最顶部字符串的索引,默认值为
[1]
。
4.4.2 Max
Max 属性指定 uicontrol 对象的最大值,其值取决于 uicontrol 对象。
4.4.3 Min
Min 属性指定 uicontrol 对象的最小值,其值取决于 uicontrol 对象。
4.4.4 Value
Value 属性指定 uicontrol 对象的当前值,其值可以是标量或向量,取决于 uicontrol 对象。
4.5 控制访问的属性
4.5.1 HandleVisibility
HandleVisibility 属性的作用与 uicontextmenu 中的相同,控制对象句柄的可见性。
4.5.2 HitTest
HitTest 属性决定对象是否可以通过鼠标点击选择,值可以为 on 或 off,默认值为 on。
5. 总结与展望
5.1 总结
通过对 uicontextmenu 和 uicontrol 的详细介绍,我们了解到它们在 MATLAB 图形用户界面开发中的重要作用。uicontextmenu 可以为用户提供便捷的上下文操作菜单,而 uicontrol 则提供了丰富的控件样式,满足不同的交互需求。合理设置它们的属性,可以实现复杂的交互功能。
5.2 展望
在未来的 MATLAB 开发中,我们可以进一步探索 uicontextmenu 和 uicontrol 的组合使用,创建更加复杂和用户友好的图形用户界面。例如,可以结合 uicontextmenu 的上下文菜单和 uicontrol 的各种控件,实现更加高效的交互操作。同时,随着 MATLAB 版本的不断更新,这些功能可能会得到进一步的优化和扩展,我们可以持续关注并应用新的特性。
5.3 流程图
graph LR
A[uicontextmenu创建] --> B[设置属性]
B --> C[定义菜单项]
C --> D[关联对象]
D --> E[完成创建]
F[uicontrol创建] --> G{选择样式}
G --> H[复选框]
G --> I[可编辑文本字段]
G --> J[列表框]
G --> K[弹出菜单]
G --> L[按钮]
G --> M[单选按钮]
G --> N[滑块]
G --> O[静态文本标签]
G --> P[切换按钮]
H --> Q[设置属性]
I --> Q
J --> Q
K --> Q
L --> Q
M --> Q
N --> Q
O --> Q
P --> Q
Q --> R[关联回调]
R --> S[完成创建]
以上内容详细介绍了 uicontextmenu 和 uicontrol 的属性和使用方法,希望能帮助大家更好地在 MATLAB 中创建图形用户界面。


超级会员免费看
8631

被折叠的 条评论
为什么被折叠?



