共计 2098 个字符,预计需要花费 6 分钟才能阅读完成。
在保存GUI程序时,Matlab会自动生成.fig和.m文件,其中的.m就是我们现在要操作的对象。
我们就是M文件中添加控件的回调函数相应用户的操作!这也是GUI编程的核心内容,它要求你必须掌握Matlab基本编程以及图形句柄语句!
打开.m文件,发现里面有很多function的代码,看得我们眼花缭乱,呵呵,不要胆怯!本教程是初级教程, 我们只涉及里面的callback,其他的我们可以暂时置之不理!至于其它的我们以后的教程中对做相关介绍!
在正式讲解之前,一个小使用技巧,Matlab Editor(代码编辑器)工具栏显示函数按钮 ,可以让我们快速跳转我们需要的函数位置!这个在.m内容很多的时候很有用哦!
1、在Editor中工具栏的函数Show Function中选择input1_editText_Callback
或者右击tag为input1_editText的编辑文本框,View Callback→Callback
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…
如果不想让Matlab自动生成fig文件,而只是生成M文件,可以如下操作:Tools→GUI Option