第一次使用matlab gui 设计窗口设计
使用GUI实现均匀线列阵ULA指向性函数的绘制
选修了学校的matlab课程,第一次接触到了GUI觉得很是帅气,简单易学且功能强大,遂把第一次编程经历记录在此,由于是新手向所以会详细的记录我的编程过程,希望能帮助到不知道从何做起的朋友。
进入GUI设计界面
打开matlab之后可以直接在命令行中输入’guide‘回车来进入到界面设计,如图。
之后在这里直接选择’空白GUI‘点击确定就可以开始设计窗口了。
窗口搭建
进入GUI设计界面之后,左侧的工具都可以直接拖拽到右侧的操作空间,想要什么形式的表格都可以自己搭建十分方便:
这里是我自己搭建的表格形式,因为是想要构建一个计算线性等间隔线列阵指向性的表格,因此需要阵元个数、阵元间距和波长三个参数(注:想要改变文本。可以双击,也可以右键选择属性检测器,按钮和单选按钮、按钮组的名称同理),可以使用上方工具栏的“串”来对齐文本或按钮(按住shift+鼠标左键点击可以同时选中多个目标)。
回调函数编程
说简单一点,现在你光有了窗口,但是又如何将表格中各个数据联系起来呢,点一下按钮你的图像会出现相应的变化,这时候就需要编程回调函数了,通过指针将数据传递到代码中,然后进行编译。
以我这里的表格为例,我直接右键’生成图像‘按钮→查看回调→Callback,就可以进入编程界面:
##function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global flag;
N=str2double(get(handles.edit1,'String'));
lambda=str2double(get(handles.edit2,'String'));
d=str2double(get(handles.edit3,'String'));
phi=0:0.1:180;
if flag==1
Bphi=abs(sin((N*pi*d/lambda).*cos(phi))./sin((N*d/lambda).*cos(phi)));
plot(handles.axes1,phi,Bphi);
title(handles.axes1,'直角坐标系');
polar(handles.axes2,phi,Bphi);
title(handles.axes2,'极坐标系')
else
Bphi=20*log(abs(sin((N*pi*d/lambda).*cos(phi))./sin((N*d/lambda).*cos(phi)))/max(...
abs(sin((N*pi*d/lambda).*cos(phi))./sin((N*d/lambda).*cos(phi)))));
plot(handles.axes1,phi,Bphi);
ylim(handles.axes1,[-400 0]);
title(handles.axes1,'直角坐标系');
polar(handles.axes2,phi,Bphi);
title(handles.axes2,'极坐标系');
end
看第一行’function pushbutton1_Callback‘简单的解释就是你push了button1以后会执行以下的代码,因此你直接将自己在按下’按钮1‘(右键→属性可以查看每个原件的’tag‘从而知道这个原件是’button‘几。)后需要执行的东西写好就行了。
使用’handles.tag‘将你需要的数据导出,方便编程处理。
global定义的全局变量是在后面的按钮组处需要用到的。
线性等间距阵列的指向性方程如下:
因为要在两个坐标系下表示(对数和线性)因此用到了if…else
pushbutton处的回调编好了之后,就要考虑按钮组的程序了,很容易理解,因为你选择了不同的按钮(线性或是对数)对应需要执行的代码肯定是不一样的,这里直接在按钮组处右键点击→查看回调→Selectionchangedfuc就可以对按钮组的代码进行编译:
function uibuttongroup2_SelectionChangedFcn(hObject, eventdata, handles)
% hObject handle to the selected object in uibuttongroup2
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global flag;
str=get(hObject,'tag');
switch str
case 'radiobutton3'
flag=1;
case 'radiobutton4'
flag=2;
end
可以看到,我就是在这里设置了全局变量flag,当str是radiobutton3(我上面一个单选按钮的tag)时,给flag赋值1,当str是radiobutton4(我上面一个单选按钮的tag)时,给flag赋值2,与上面的pushbutton的代码结合起来就知道按钮组的选择功能是怎么实现的了。
关闭窗口的按钮可以如下代码实现:
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
close(gcf);
结果
大功告成!!!!撒花!!!