假如读者所从事的数据分析、解方程、计算结果可视工作比较单一,那么一般不会考
虑图形用户界面(Graphical User Interfaces ,GUI)的制作。但是如果读者想向别人提供某种新的设计分析工具,想体现某种新的设计分析理念,想进行某种技术、方法的演示,那么图形用户界面也许是最好的选择之一。 MATLAB本身提供了很多的图形用户界面,如sisotool“单输入单输出控制系统设计工具”、fdatool“滤波器设计和分析工具”等。这些工具的出现不仅提高了设计和分析效率,而且改变原先的设计模式,引出了新的设计思想,改变了和正在改变着人们的设计、分析理念。正是出于这种观察,作者将图形用户界面内容列入本教程。 本章由四个精心设计的算例组成。这四个算例,一方面尽可能多地向读者展现构成GUI的各种控件或组件,另方面借助算例中回调函数的编写较快地将读者引向GUI制作的纵深。 本书作者相信:读者只要耐心地按照示例进行操作,便能在愉快感受GUI成功制作的同时,事半功倍地掌握GUI的制作技巧。
8.1 图形用户界面入门示例
1中阻尼比对单位阶跃响应的影
s22s1响,需要制作如图8.1-1所示的用户界面。要求:在界面右侧的编辑框中输入阻尼比的具
【例8.1-1】为演示归一化二阶系统G(s)体“大于0的数值标量”,就能在坐标轴上画出相应曲线。
图8.1-1 待制作的二阶系统单位阶跃响应演示界面
(1)GUIDE开发环境的引入
1
图8.1-2 进入GUIDE开发环境的默认引导对话窗
图8.1-3 默认的空白用户界面开发环境GUIDE
2
(2)根据要求选配界面组件
图8.1-4 选配界面组件后的版面编辑器
(3)界面组件的参数设置
图8.1-5 窗属性编辑器和设置的属性值
3
图8.1-6 经属性设置后的设计版面
(5)初步设计界面的保存
图8.1-7 仅在外形上与题给要求一致的GUI
4
图8.1-8 版面编辑器自动生成的设计界面M文件
(6)回调程序的编写
图8.1-9 GUIDE生成的“空白回调函数体”示图
5
图8.1-10 填写工作指令后的回调子函数
(7)所建界面的使用
8.2 控件创建及应用示例
1单位阶跃响应制作如图8.2-1所示的用2s2s1【例8.2-1】为归一化二阶系统G(s)户界面。要求:(1)通过编辑框和滑键都能输入阻尼比。(2)刚启动的界面初始形态如图8.2-1所示。(3)在刚启动的初始界面上,响应曲线用红线绘制;而一旦界面被操作,则响应曲线将用蓝线绘制。(4)在列表框中的三个选项可以任意组合。
6
图8.2-1 用户界面的初始状态
(1)GUI版面编辑器的开启
(2)对未来界面窗属性设置
(3)为版面设计区引入坐标参照系
图8.2-2 “格尺”对话框(默认状态)
7
图8.2-3 一般坐标参照工具示意
图8.2-4 设计本例用户界面的版面编辑器
(4)根据题目要求进行界面构建
8
。 。 。 。
图8.2-5 执行文件尚未填写时的生成界面
(5)由版面编辑器自动产生的exm080201.m文件的结构
(6)编写初始化程序
function exm080201_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to exm080201 (see VARARGIN)
%U_Start ---“%U_Stat”和“%U_End”之间的 M 码均由作者编写-----U Start zeta=0.3; set(handles.edit1,'String',num2str(zeta)) set(handles.slider1,'Value',zeta) set(handles.gridon,'Value',0) set(handles.gridoff,'Value',1)
9
set(handles.listbox1,'Value',1) handles.t=0:0.05:15; handles.Color='Red'; handles.zeta=zeta; handles.flag=0; handles=surfplot(handles); handles.flag=1; handles.Color='Blue';
%U_End -----------------------------------------------------------------------------------U End handles.output = hObject; guidata(hObject, handles);
(7)可编辑框的回调子函数
function edit1_Callback(hObject, eventdata, handles) % hObject
% eventdata reserved - to be defined in a future version of MATLAB % handles
%U_Start-----------------------------------------------------U_Start sz=get(hObject,'String'); zeta=str2double(sz); set(handles.slider1,'Value',zeta) handles.zeta=zeta; handles=surfplot(handles); guidata(hObject, handles);
%U_End-------------------------------------------------------U_End
(8)滑键回调子函数
function slider1_Callback(hObject, eventdata, handles) %U_Start-----------------------------------------------------U_Start zeta=get(hObject,'Value'); set(handles.edit1,'String',num2str(zeta)) handles.zeta=zeta; handles=surfplot(handles);
guidata(hObject, handles);
%U_End-------------------------------------------------------U_End
(9)无线电按键回调子函数
function gridon_Callback(hObject, eventdata, handles)
%U_Start-----------------------------------------------------U_Start set(handles.gridoff,'Value',0) grid on
%U_End-------------------------------------------------------U_End
function gridoff_Callback(hObject, eventdata, handles)
%U_Start------------------------------------------------------U_Start set(handles.gridon,'Value',0) grid off
%U_End-------------------------------------------------------U_End
(10)列表框回调子函数
function listbox1_Callback(hObject, eventdata, handles) %U_Start-----------------------------------------------------U_Start
10
listindex=get(hObject,'Value'); if any(listindex==1) set(handles.listbox1,'Value',1) end
handles.flag=0; handles=surfplot(handles); handles.flag=1; guidata(hObject, handles);
%U_End-------------------------------------------------------U_End
(11)绘图子函数
function handles=surfplot(handles) % handles=surfplot(handles) % handles % zeta=handles.zeta; t=handles.t;
listindex=get(handles.listbox1,'Value'); Nt=length(t);
if handles.flag==0 cla zmin=get(handles.slider1,'Min'); zmax=get(handles.slider1,'Max'); zt=zmin:0.05:zmax; Nz=length(zt);
[ZT,T]=meshgrid(zt,t); Y=zeros(Nt,Nz); for k=1:Nz Y(:,k)=step(tf(1,[1,2*zt(k),1]),t); end
surface(ZT,T,Y) shading flat else
delete(handles.g1) delete(handles.rline) end
xz=ones(1,Nt)*zeta; y1=ones(1,Nt)*1;
y=step(tf(1,[1,2*zeta,1]),t); gz=[zeta,zeta,xz,zeta,zeta,xz]; gt=[t(1),t(1),t,t(end),t(end),fliplr(t)]; gy=[0,1,y1,1,0,0*y1];
handles.g1=line(gz,gt,gy,'Color','g','LineWidth',1);
handles.rline=line(xz,t,y,'Color',handles.Color,'LineWidth',2); K=length(get(handles.listbox1,'Value')); for jj=1:K
switch listindex(jj) case 1 case 2 k95=min(find(y>0.95));k952=[(k95-1),k95]; t95=interp1(y(k952),t(k952),0.95);
line(zeta,t95,0.95,'marker','+','markeredgecolor','k','markersize',6); case 3 [ym,km]=max(y);
11
if km line(zeta,t(km),ym,'marker','.','markeredgecolor','k','markersize',5); end case 4 ii=max(find(abs(y-1)>0.05)); if ii xlabel('{\\zeta}') ylabel('t') zlabel('y') alpha(0.7) view(75,44) (12)用户界面的运行 图8.2-6 显示列表框全部选项的界面示例 〖说明〗 8.3 菜单及工具图标的设计示例 12 8.3.1 为界面配置标准菜单条和工具条 【例8.3-1】在例8.2-1产生的界面上,配置MATLAB标准图形窗菜单。 图8.3-1 显示标准菜单和工具条的图形用户界面 (1)以例8.2-1的用户界面为基础制作新界面 (2)利用属性编辑器为界面配置标准菜单条和工具条 (3)界面操作示范 〖说明〗 8.3.2 菜单定制和标准图标选用 【例8.3-2】制作如图8.3-2所示的图形用户界面。该用户界面上,不仅配置了一个定制菜单,用以控制界面上坐标框的是否封闭,而且还配置了一个“图形数据标识图标” 。 13 图8.3-2 带定制菜单和选用标准工具图标的用户界面 (1)利用已有用户界面为基础制作新界面 (2)撤销原界面上的标准菜单和工具条 (3)定制菜单 14 图8.3-3 菜单编辑器的外形和功能分区 (4)为定制菜单项编写回调子函数 function boxon_Callback(hObject, eventdata, handles) %U_Start-----------------------------------------U_Start box on set(handles.boxon,'Enable','off') set(handles.boxoff,'Enable','on') %U_End-------------------------------------------U_End function boxoff_Callback(hObject, eventdata, handles) %U_Start-----------------------------------------U_Start box off set(handles.boxoff,'Enable','off') set(handles.boxon,'Enable','on') %U_End-------------------------------------------U_End (5)选用标准工具图标 15 图8.3-4 工具条编辑器的外形和功能分区 (4)保存及生成题目所要求的用户界面 〖说明〗 习题8 1. 以算例8.3-2的图形用户界面文件exm080302.m和exm080302.fig为基础,删除原界面 上的两个无线电按键,以便获得如图p8-1的新图形用户界面。 16 图 p8-1 2. 以算例8.3-2的图形用户界面文件exm080302.m和exm080302.fig为基础,用双稳态按 键Toggle Button替代无线电按键实现对坐标网格绘制的控制,产生如图p8-2的新图形用户界面。 17 图 p8-2 18 因篇幅问题不能全部显示,请点此查看更多更全内容