三、书写GUI回调函数(callback)代码
在保存GUI程序时,Matlab会自动生成.fig和.m文件,其中的.m就是我们现在要操作的对象。
我们就是M文件中添加控件的回调函数相应用户的操作!这也是GUI编程的核心内容,它要求你必须掌握Matlab基本编程以及图形句柄语句!
打开.m文件,发现里面有很多function的代码,看得我们眼花缭乱,呵呵,不要胆怯!本教程是初级教程, 我们只涉及里面的callback,其他的我们可以暂时置之不理!至于其它的我们以后的教程中对做相关介绍!
在正式讲解之前,一个小使用技巧,Matlab Editor(代码编辑器)工具栏显示函数按钮
fx.png (351 Bytes, 下载次数: 269)
2010-2-27 16:44 上传
,可以让我们快速跳转我们需要的函数位置!这个在.m内容很多的时候很有用哦!
1、在Editor中工具栏的函数Show Function中选择input1_editText_Callback
fx2.png (12.58 KB, 下载次数: 297)
2010-2-27 16:46 上传
或者右击tag为input1_editText的编辑文本框,View Callback→Callback
viewcallback.png (174.09 KB, 下载次数: 267)
2010-2-27 16:52 上传
2、此时光标会跳转到.m文件的function input1_editText_Callback处,方便我们直接编辑
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复制代码在上面代码下添加如下MATLAB代码
% 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最后都添加该命令复制代码3、为input2_editText_Callback添加完全相同的代码
4、编辑add_pushbutton_Callback回调函数,使用上面提到的方法,将光标定位到
% --- 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)复制代码在后面我们添加上如下代码
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程序时,不想让Matlab为每一个callback回调函数自动生成注释文本,可以如下操作:File→Preferences...
prefer.png (21.54 KB, 下载次数: 265)
2010-2-27 16:44 上传
如果不想让Matlab自动生成fig文件,而只是生成M文件,可以如下操作:Tools→GUI Option
guoptions.png (25.61 KB, 下载次数: 279)
2010-2-27 17:21 上传