创建简单的UI界面,并包含“普通按钮”、“弹出式菜单”以及“可编辑文本”3种控件,通过“弹出式菜单”选择文字,按下按钮后在可编辑文本中显示。
首先,创建.fig文件,在”命令行“窗口内输入guide
,点击回车后弹出以下弹窗,左侧的GUIDE templates即GUIDE模板,默认为空白,选中其它模板后右侧可以看到预览画面。
勾选下面弹窗以修改文件名称(好像这里的文件名称不能和文件夹名重复,也就是这里不能设置为try.fig,重复的话后面不能保存更不用说运行了),最后点击下面的确定。
此时在“当前文件夹”窗口会产生T.fig文件和T.m文件,弹出T.fig弹窗,如下图所示,并且“编辑器窗口”也是选中了T.m文件。
T.m文件可以认为是T.fig文件的本体,运行整个UI界面有两种方法:点击上图.fig文件弹窗右上角的绿色运行符,或运行T.m文件。
注意右键“当前文件夹”窗口的.fig文件,然后点击“运行”,无法真的运行该界面,只能看而已。
若关闭后要进入上述编辑框,可右键“当前文件夹”窗口的.fig文件,点击“在GUIDE”中打开。
本文将通过3种控件:“普通按钮”、“弹出式菜单”以及“可编辑文本”创建简单的UI界面,首先将这3种控件拖动至背景框,停留在控件上会显示控件名,如下图所示。
其次,随意地放置这些控件,拖动至背景框后,点击控件并左键按住边缘点并拖动可以对其进行拉伸。
放置后双击相应控件,会弹出该控件的属性检查器(一般左上角显示1个图标并写着”检查器“),根据下面的表格设置3种控件的对应属性:
控件名|修改属性|修改值|作用 | 修改属性 | 修改值 | 作用 |
普通按钮 | FontSize | 10 | 字体变大好看一点 |
String | 按钮 | 修改显示的文字 | |
Tag | button | 方便后续调用 | |
弹出式菜单 | FontSize | 10 | 字体变大好看一点 |
Tag | menu | 方便后续调用 | |
可编辑文本 | FontSize | 10 | 字体变大好看一点 |
HorizontalAlignment | left | 左对齐会好看 | |
Max | 2 | 使Max-Min>1,使能多行输入以及滑动条 | |
Tag | edit | 方便后续调用 |
通过上述修改后,可以先点击右上角运行图标,运行试试。如下图所示,可以点击“按钮”查看变化,点击“文本编辑框”并输入相应数据,又或者点击”弹出式菜单“。当然,此时各种操作都不会执行相应的操作(毕竟没设置),接下来设置各个控件的回调函数,以实现相应的交互功能。
在T.m文件中,前两个函数为T函数和T_OpeningFcn函数,一般控件的初始化代码放在T_OpeningFcn函数中,未添加代码时该函数如下所示(省略注释),初始化代码一般添加在最下面。
function T_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
下面是添加初始化代码后的T_OpeningFcn函数,以及相应代码的注释。
function T_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
global str; %定义全局变量str
set(handles.menu, 'string', {'也', '可', '以', '清', '心',... %...为续行符
}, 'value', 1); %设置弹出式菜单弹出的内容(string属性)以及目前选中的选项(value属性)
str=''; %初始化变量str为空
set(handles.edit, 'string',str); %设置可编辑文本的内容(string属性)
函数格式可参考可参考MATLAB函数及文件一文。
set函数设置控件的属性可参考GUI应用一文的控件-属性。
上述代码添加后,可运行T.m文件,会弹出UI界面,可以查看这些代码做了什么。
首先回到GUIDE中,打开方法如下:
打开后,右键“普通按钮”-查看回调-点击Callback,此时“编辑器”窗口跳转到T.m文件的button_Callback函数中(函数名称的前面是控件的Tag),为该函数添加相应代码,如下所示。
function button_Callback(hObject, eventdata, handles)
global str; %这里变成了声明全局变量global(因为已被定义)
Menu = get(handles.menu, 'String'); %获取弹出式菜单的内容,实际上该项是不变的
Value = get(handles.menu, 'Value'); %获取弹出式菜单目前所选中的内容
str = [str,Menu{Value}]; %将选中的内容添加到str
set(handles.edit, 'String', str); %将str的内容显示到可编辑文本
此时,整个工程完成,点击运行T.m文件,点击按钮,可将”弹出式菜单“目前选中的内容写入”可编辑文本“中,并且之前的内容不会被覆盖。
实际上本工程中,用控件“列表框”比“弹出式菜单”会好用一点,而且使用方式也几乎一模一样,但弹出式菜单确实比较常用。
通过本文的介绍,通过matlab创建UI界面应该问题不大,对其它控件的使用介绍可参考GUI应用一文。