如果不想看文章,可以看参考视频1或者参考视频2
阅读本文,可以节省一个半小时的看视频的时间哦~
在MATLAB命令行中输入guide,回车,进入GUI的界面,
如图,左边两列为基本的控件单元,分别有:按钮、滑动条、单选按钮、复选框、可编辑文本、静态文本、弹出式菜单、列表框、切换按钮、表、坐标区、面板、按钮组、ActiveX控件。网格上方的工具中,常用的按钮有:对齐对象、菜单编辑器、运行图窗。
选择需要的控件,摆放在界面中即可。
双击每个控件,会弹出该控件的检查器,里面有很多属性
每一个控件都有唯一的Tag标注用于区别,在创建好控件之后,对应的Tag值就会存入handles句柄的结构体中。Tag的值会与回调函数的函数名相关联。
Handles句柄这个结构体中的属性都是全局变量,用于在不同的回调函数之间实现参数的传递。如handles.edit1代表的就是可编辑文本框1这个对象。
在函数中的局部变量可以通过新建handles结构体的属性,变成全局变量,记得一定要更新这个结构体。如handles.Threshold= Th;
guidata(hObject,handles)。就可以实现在其他所有的函数中调用handles.Threshold这个属性的值。
一般情况下,及时删除了控件,也不要随意删掉.m文件中的看似没有用到的代码,这样很容易出错。
按钮pushbotton为最基本的控件,在GUI界面中点击按钮之后,就会自动进入该按钮的回调函数,然后执行该回调函数中的内容。图2.2所示,在.m文件中查看定位该回调函数的方法,右键—查看回调—Callback。鼠标点击按钮,进入callback回调函数中。KeypressFcn与键盘输入有关,CreateFcn和DeleteFcn与这个按钮的创建与删除有关,一般不用。
图2.2 查看按钮的回调函数
如图2.3,在滑动条的属性中设置最大最小值,就是滑动条两端的数值,其中较为重要的属性有Value,初始值就是滑块在初始的时候停放的位置,一般设为0。在滑块滑动的过程中,Value的值会随之变化,根据需要在相关的回调函数中通过代码get(handles.slider2,‘Value’)获取value的值,得到的是数值num。
图2.3 滑动条属性设置
文本框分为静态文本和可编辑文本。
静态文本框内的文字初始化时输入,之后不可改变;可编辑文本框内的文字可以在运行的时候从键盘输入,或者是在其他控件的回调函数中,向可编辑文本框的String属性写入需要显示的内容如set(handles.edit1,‘String’,num2str(round(th*255))),注意String为字符串类型的,向两种文本框中写入的都是字符串类型。双击控件进入检查器,如图2.4 可编辑文本的检查器图2.4,在其中可以修改属性,常用的有字体、字号、Tag、String。
图2.4 可编辑文本的检查器
单选框和复选框的使用方法类似,**在属性中设置max、min的数值。按下时或者是勾选时,value值等于max的数值,未选择时Value值为min的数值。**一般可以在单选框或复选框的回调函数中使用,val = get(handles.checkbox1,‘Value’);匹配if—else语句执行不同的操作,表示按下或未选中执行指定的不同操作。Value的初始值只能在max和min之间选择。切换按钮(togglebutton),其和pushbutton有所区别。该控件主要用来标识状态(0-1双状态),pushbutton主要用来触发事件。切换按钮点击一次Value值为0,再点击一次value值为1。
两者的使用方法类似,其属性中String的行数与Value值对应,用户点击了第几行,Value值就为几。结合switch-case语句,实现点击不同的行就可以执行不同的功能。如图2.5所示。
在列表中,str = get(handles.listbox1,‘String’);获得列表框中的所有String,str=为一个cell,selectes_index =
get(handles.listbox3,‘Value’);获取选中的是第几行。set(handles.text10,‘String’,str{selectes_index});通过索引得到点击的那一行的String字符串,然后向某个文本框内写入。
还可以定义列表框中每一行String所代表的具体的数值。首先要在listbox 的createFn中定义,即表示在刚刚创建的时候就调用的函数。定义结构体的一个新的属性,用cell保存,其中用于存放各行所对应的具体数值。
图2.5 列表框的属性栏
放置一个按钮组后,在其中放置若干个单选按钮或者切换按钮。按钮组的特点是:同一时刻只有一个可以被选中。在按钮组bottongroup的SelectionchangeFcn函数中。获取当前选中的按钮的Tag:current_obj= get(eventdata.NewValue,‘Tag’);返回的是字符串,然后结合switch-case语句,即可实现点击不同的按钮,实现不同的功能。
按钮组中不可以放多个按钮(pushbotton),否则无效!只能放置多个单选按钮和切换按钮!
因为单选按钮按下的value是max,取消的value是min;
切换按钮按一下的value是0,按两下的value是1,
但是按钮(pushibotton)按下之后,值不会变换,只会进入回调函数。
菜单栏中的内容是显示在界面的菜单栏中,通过新建不同的主菜单和下一级的菜单实现点击菜单栏后的一系列内容。
上下文菜单是指在界面中,鼠标点击右键所显示的内容,使用方法与菜单栏相同。如图2.6所示。
编辑器上方可以新建主菜单和子菜单、移动菜单的从属关系,右边菜单属性,文本就是界面上菜单显示的文字内容,标记就是类似于控件的Tag,右下方点击查看即可进入该菜单栏的回调函数,表示在界面的菜单栏中,点击这一栏的文字就会执行的操作。
图2.6 菜单栏编辑器
%打开文件,获取文件路径:第一个大括号内是文件的指定格式
[imgfilename imgpathname]=uigetfile({'*.jpg;*.png'},'Select a RGB image');
%保存文件
[FileName,PathName]=
uiputfile({'*.jpg','JPEG(*.jpg)';'*.bmp','Bitmap(*.bmp)';'*.gif','GIF(*.gif)';'*.*', 'All Files (*.*)'},'Save
Picture','Untitled');
%设置显示图片的区域
axes(handles.axes1)
%获取句柄某个对象的某种属性
thresh
= get(handles.edit1,'String')
%设置句柄某个对象的某种属性
set(handles.text5,'String',thresh)
%更新句柄
guidata(hObject,handles)
%弹出提示框(无需用户输入)
msgbox(‘建议输入一下格式的内容’)
%弹出对话框(用户可以在其中输入)
prompt={'请设置高斯噪声的均值' '请设置高斯噪声的方差' };
%一个单引号对应一行文字,下面会有人机交互对话框用于从键盘输入
name='输入均值方差';
%提示框的名称
numlines=1;
defaultanswer={'0.04' '0.01'};
%默认对话框中的数值
%获取对话框中的用户输入信息
anss=inputdlg(prompt,name,numlines,defaultanswer);
%用户在每一行的对话框中输入的信息将存放在anss这个cell中
x1=str2num(anss{1});
x2=str2num(anss{2});