Matlab的GUI编程我们可以用两种方式实现,一是自己用代码构建界面,二是借助GUI设计工具。
第一种方法完全用代码设计界面比较麻烦,第二种方法属于所见即所得模式,比较直观方便,我比较喜欢用后者。后者除了生成一个fig文件外,同时会生成一个m文件,用以编写响应代码。虽然生成的代码带来了一些方便之处,有些类似于VC中的MFC,但是我却觉得太过复杂,而且来龙去脉也不甚清楚。我喜欢所有的代码都在自己的掌握之中,于是摈弃了matlab自己生成的代码,自己编写了一个GUI的模型,用起来还是比较方便的。
function Output = GUIModel(Input)
% GUI 程序模版
% 作者: SCIE
% 创建: 2007.04.29
% 修改: 2007.04.29
if nargin == 0
Input = [0, 0];
end
% 生成主界面
[hFig, handles] = InitGUI(Input);
% 获取界面句柄,初始化数据,并保存
handles = InitData(handles, Input);
guidata(hFig, handles);
% 等待用户操作
uiwait(hFig);
% 获取需要返回的数据
if nargout == 1
handles = guidata(hFig);
Output = handles.Output;
end
% 关闭主界面
delete(hFig);
% 初始化程序界面
function [hFig, handles] = InitGUI(Input)
% 打开主窗口-Fig 文件(在设计界面时必须将各控件的默认 CallBack 值都去掉)
% 各控件的 Tag 值设置:
% 主窗口:MainFigure
% 文本框:edtNum1, edtNum2, edtResult
% 按钮: btnCalc, btnExit
hFig = openfig(mfilename);
handles = guihandles(hFig);
set(hFig, 'Units', 'normalized', 'Position', [0.35 0.5 0.3 0.2]);
% 设置控件的初始值
set(handles.edtNum1, 'String', num2str(Input(1)));
set(handles.edtNum2, 'String', num2str(Input(2)));
% 设置回调函数
set(hFig, 'CloseRequestFcn', @CloseRequestFcn);
set(handles.btnCalc, 'CallBack', @btnCalc_CallBack);
set(handles.btnExit, 'CallBack', @btnExit_CallBack);
% 设置存储到 handles 中的数据
function ret_handles = InitData(handles, Input)
ret_handles = handles;
ret_handles.Input = Input;
ret_handles.Output = [];
% 关闭按钮的响应函数
function CloseRequestFcn(hObject, EventData)
uiresume(hObject);
% 计算按钮的回调函数
function btnCalc_CallBack(hObject, EventData)
% 获取控件句柄
handles = guidata(hObject);
% 获取数据进行计算并显示计算结果
num1 = str2num(get(handles.edtNum1, 'String'));
num2 = str2num(get(handles.edtNum2, 'String'));
result = num1 + num2;
set(handles.edtResult, 'String', num2str(result));
% 保存输出结果
handles.Output = result;
guidata(hObject, handles);
% 退出按钮的回调函数
function btnExit_CallBack(hObject, EventData)
handles = guidata(hObject);
uiresume(handles.MainFigure);