一、搭建最基本的GUI
本节通过两个例子进行论述,分别介绍GUI基本操作,即数值运算、数据导入、图形绘制等功能的GUI实现。
A-加法器
首先上效果图:
输入两个数值,点击Add!,便可显示结果,下面开始逐步介绍。
- GUI新建
常用的新建GUI方法有两个:
-
- Command Window输入guide—>Create New GUI;
- Home—>New—>Graphical User Interface;
注意:勾选“Sace new figure as:”,可选择存储路径,并对文件命名。
这里我们选择默认的“Blank GUI(Default)”,点击“OK”,便可进入, 本文主要用到以下几个选框:
- GUI框架搭建
本文为基础内容,框架内修改的主要是
点击需要添加的选框至面板中,双击选框,特性中:
其中
String:显示的名称;
Tag:标签,主要用于程序编写时,对变量进行定位;
常用:
position:指示空间在figure中的位置
font**:字体相关属性
string:相当如VB中的caption,就是显示在控件上的文字
tag:控件的唯一标识符,相当于ID,我们需要tag来指定某一个空间
因此,我们只需要设定参与操作的选框tag;对于不涉及操作、仅仅作为显示的选框,其tag我们可以默认。
分析加法器,我们总共需要的选框:
其中,涉及操作的有:
两个输入(两个编辑文本框) + 一个执行加法运算的开关(一个确定按钮)+结果显示(一个静态文本框)。
设置完成的效果图:
点击“保存”,此时便出现.m和.fig两个文件,加法器的GUI框架搭建完毕。
- GUI对应代码完善
步骤一:设定tag、String等参数;
首先是回调函数的定位(如果已经退出GUI编辑框,可Command Window输入guilde进入):
选中并右键—>Viwe Callbacks—>Callback,即可打开对应的函数模块。
对应提取数据的代码(提出为字符,需要进行str2num的转换)
1
|
a =
get
(handles.input_a,
'String'
);
%String的S大写
|
假设两个输入框的String分别设为0(无输入默认显示0),tag分别设定为:
-
- input1_editText,input2_editText
OK按钮重命名:String设置为:Add! 对应tag为:
-
- add_pushbutton
结果的String设为0,对应tag设为:
-
- answer_staticText
步骤二:读取输入参数
打开第一个输入框,函数模块初始为
1
2
3
4
5
6
7
8
|
function
input1_editText_Callback(hObject, eventdata, handles)
% hObject handle to input1_editText (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'String') returns contents of input1_editText as text
% str2double(get(hObject,'String')) returns contents of
% input1_editText as a double
|
编辑回调函数,修改为:
1
2
3
4
5
6
7
8
9
10
11
12
|
% handles 包含figure中所有图形对象句柄的结构体,如果我们想引用tag为mytag的控件,使用handles.mytag
% set/get 函数是用来设置/获取某个控件属性
% 使用get命令获取第一个加数,并将它转换成数值
input
=
str2num
(
get
(hObject,
'String'
));
% string属性是字符串,所以必须转换成数值
% 检验输入是否为空,是则将它置为0
if
(
isempty
(
input
))
set
(hObject,
'String'
,
'0'
)
end
% 保存handles结构体,只要在handles结构体有改变时,才需要保存
guidata
(hObject, handles);
% 这里由于handles没有改变,故这里其实没有必要,建议在所有Callback最后都添加该命令,此处为将参数设定为GUI变量,可全局调用。
|
第二个输入框同第一个输入框的操作相同;
步骤三:输出结果的显示
关联控制键,并将结果赋给对应的tag,初始的回调函数:
1
2
3
4
5
|
% --- Executes on button press in add_pushbutton.
function
add_pushbutton_Callback(hObject, eventdata, handles)
% hObject handle to add_pushbutton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
|
修改后:
1
2
3
4
5
6
7
8
9
10
|
a =
get
(handles.input1_editText,
'String'
);
b =
get
(handles.input2_editText,
'String'
);
% a和b是字符串变量,我们需要使用str2double函数将其转换为数值
% 然后才能相加,否则字符串是没法相加的
total =
str2num
(a) +
str2num
(b);
% 格式转换,转换为数值
% 由于string属性是字符串,所以必须将两个数的和转换为字符串
c =
num2str
(total);
% 转换为字符串
% 将结果赋值给answer_staticText空间的string属性,于是就可以显示结果了
set
(handles.answer_staticText,
'String'
,c);
guidata
(hObject, handles);
% 更新结构体
|
至此,完成了GUI代码的完善。
- GUI运行
GUI的运行主要分为三种方式。
方式一:Current Directory运行.m文件
同普通程序运行一致,运行结束即弹出GUI画框,按要求操作即可。
方式二:GUI界面run
Command Window输入guide,进入GUI编辑界面,点击右上角的,即弹出GUI界面。
方式三:Command Window运行GUI文件名
例如有GUI程序:example.fig,切换到该文件的目录下,在Command Window输入example,回车运行,即弹出GUI界面。
作者:黄杰。
时间:2020-012-14 18:43:35