ch09图形用户界面GUI.docx
- 文档编号:10148216
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:39
- 大小:1.67MB
ch09图形用户界面GUI.docx
《ch09图形用户界面GUI.docx》由会员分享,可在线阅读,更多相关《ch09图形用户界面GUI.docx(39页珍藏版)》请在冰豆网上搜索。
ch09图形用户界面GUI
第9章图形用户界面GUI
图形用户界面(GraphicalUserInterfaces,GUI)是由窗、轴、按键、菜单、工具图标、文字说明等对象(Objects)构成的一个用户界面。
用户通过鼠标或键盘选择、激活这些图形对象,实现计算、绘制图表和产生动画等。
图形用户界面不仅形象生动、界面友善、操控灵活,而且为人们提供了定性定量结合、局域全域结合、时域频域结合、模拟数字结合的数据探索、科学分析的仿真平台。
图形用户界面的出现,使过往视为经典的一些方法和技巧逐趋暗淡失色,而新的方法和技巧则日渐彩华升腾,人们的研发理念和思维方式已经和正在发生深刻的变化。
本书作者正是出于这种认识组织本章内容的。
图形用户界面开发工具(GraphicalUserInterfaceDevelopmentEnvironment,GUIDE),简称界面开发工具,是一种程式性的设计工具。
使用GUIDE设计界面遵循一定的设计步骤,而较少依赖技巧。
MATLAB新版本倡导使用GUIDE开发图形用户界面。
为此,本章以四个节次五个算例介绍了GUIDE的功能和用法、界面控件的机理和属性、各种控件、菜单、图标的详细制作步骤。
与此同时,本章还有少量篇幅用以介绍“图形用户界面的手工设计法”。
编写这部分内容的目的在于:
一,其本身简明;二,它能帮助读者更好地理解用户界面的工作机理。
本章所有算例界面都是彩色的,请读者从随书光盘mbook目录上的“ch09_图形用户界面.doc”文件中查看;而实现界面所需的带exm前缀文件名的M文件和FIG文件则都存放在随书光盘mfile目录上。
910.1设计原则和一般步骤
.1.1设计原则
.1.2一般制作步骤
910.2借助GUIDE创建GUI
.2.1GUIDE通览
101GUIDE的启动
图9.2-1显示模板预览的GUIDEQuickStart对话窗
102Preferences设置对版面编辑器的影响
图9.2-2带空白模板的GUIDE
103GUIDE的功能分区
(1)版面设计区
(2)工具条和菜单条
104待设计用户界面的性状预设
图9.2-3未来界面窗性状设置对话窗
(1)未来界面窗的缩放性
(2)未来界面窗的访问权限
(3)涉及界面窗的其他设置
105设计区的坐标参照和位置编排器
(1)版面设计区的坐标参照系
图9.2-4“格尺”对话框(默认状态)
图9.2-5设计辅助工具和功能
(2)组件位置编排器
图9.2-6编排器对三个组件进行对中处理
106控件组件属性值的初始设置
(1)控件或组件属性值初始设置的必要性
(2)在GUIDE中设置控件或组件属性值的方式
(3)对象属性观察器的引出
(4)属性观察器简介(图9.2-7)
图9.2-7属性观察器示例
107创建界面的文件保存和再命名
(1)对应GUIDE创建界面的两个伴生文件
(2)GUIDE所创建界面的保存操作
图9.2-8激活保存操作提示对话框
(3)GUIDE自动生成文件的再命名
.2.2控件的运作机理及创建
用于构建用户界面的组件(Components)中,有一类可专称为控件(Controls)。
其原因在于:
它们都是借助uicontrol用户界面控件指令(UserInterfaceControls)制作而成的。
它们的特征都是由Style等属性被赋予不同“值”后形成的。
这些控件的模板被排列在GUIDE左侧的模板区内,参见图9.2-5。
为帮助读者更好地掌握和运用控件,本节将分三小节展开。
第一小节,通过对各控件关键属性、操作方法、触发回调、回调子函数程式和控件外形变化的关联性阐述,深入浅出地剖析控件的运作机理和使用要领。
第二小节,介绍常需读者动手设置的若干通用属性。
第三小节,提供典型算例,供读者体验和参考。
101各控件的运作机理
102常需设置的控件通用属性
.2.3GUI界面的创建示例
101二阶系统阶跃响应演示界面
【例9.2-1】为归一化二阶系统
单位阶跃响应制作制作如图9.2-9所示的用户界面。
要求:
(1)通过编辑框和滑键都能输入阻尼比。
(2)刚启动的界面初始形态如图9.2-9所示。
(3)在刚启动的初始界面上,响应曲线用红线绘制;而一旦界面被操作,则响应曲线将用蓝线绘制。
(4)在列表框中的三个选项可以任意组合。
图9.2-9用户界面的初始状态
(1)GUIDE的开启
图9.2-10设计本例用户界面的GUIDE
(2)对未来界面窗属性设置
图9.2-11窗属性编辑器
(3)辅助设计功能的引入
(4)根据题目要求进行界面构建
图9.2-12执行文件尚未填写时的生成界面
(5)由GUIDE自动产生的exm090201.m文件结构
(6)编写界面开启程序
functionexm090201_OpeningFcn(hObject,eventdata,handles,varargin)
%Thisfunctionhasnooutputargs,seeOutputFcn.
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%varargincommandlineargumentstoexm090201(seeVARARGIN)
%U_Start--------UStart
zeta=0.3;
set(handles.edit1,'String',num2str(zeta))
set(handles.slider1,'Value',zeta)
set(handles.gridon,'Value',0)
set(handles.gridoff,'Value',1)
set(handles.listbox1,'Value',1)
handles.t=0:
0.05:
15;%<14>
handles.Color='Red';%<15>
handles.zeta=zeta;%<16>
handles.flag=0;
handles=surfplot(handles);%<18>
handles.flag=1;%<19>
handles.Color='Blue';%<20>
%U_End-----------------------------------------------------------------------------------UEnd
handles.output=hObject;%<21>
guidata(hObject,handles);
(7)可编辑框的回调子函数
functionedit1_Callback(hObject,eventdata,handles)
%hObject
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handles
%U_Start-----------------------------------------------------U_Start
sz=get(hObject,'String');%<6>
zeta=str2double(sz);%<7>
set(handles.slider1,'Value',zeta)
handles.zeta=zeta;%<9>
handles=surfplot(handles);
guidata(hObject,handles);%<11>
%U_End-------------------------------------------------------U_End
(8)滑键回调子函数
functionslider1_Callback(hObject,eventdata,handles)
%U_Start-----------------------------------------------------U_Start
zeta=get(hObject,'Value');%<3>
set(handles.edit1,'String',num2str(zeta))%<4>
handles.zeta=zeta;%<5>
handles=surfplot(handles);%<6>
guidata(hObject,handles);%<7>
%U_End-------------------------------------------------------U_End
(9)无线电按键回调子函数
functiongridon_Callback(hObject,eventdata,handles)
%U_Start-----------------------------------------------------U_Start
set(handles.gridoff,'Value',0)
gridon
%U_End-------------------------------------------------------U_End
functiongridoff_Callback(hObject,eventdata,handles)
%U_Start------------------------------------------------------U_Start
set(handles.gridon,'Value',0)
gridoff
%U_End-------------------------------------------------------U_End
(10)列表框回调子函数
functionlistbox1_Callback(hObject,eventdata,handles)
%U_Start-----------------------------------------------------U_Start
listindex=get(hObject,'Value');%<3>
ifany(listindex==1)
set(handles.listbox1,'Value',1)
end
handles.flag=0;%<7>
handles=surfplot(handles);
handles.flag=1;%<9>
guidata(hObject,handles);%<10>
%U_End-------------------------------------------------------U_End
(11)绘图子函数
functionhandles=surfplot(handles)
%handles=surfplot(handles)
%handles
zeta=handles.zeta;
t=handles.t;
listindex=get(handles.listbox1,'Value');
Nt=length(t);
ifhandles.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);
fork=1:
Nz
Y(:
k)=step(tf(1,[1,2*zt(k),1]),t);
end
surface(ZT,T,Y)
shadingflat
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);%<33>
handles.rline=line(xz,t,y,'Color',handles.Color,'LineWidth',2);
K=length(get(handles.listbox1,'Value'));
forjj=1:
K
switchlistindex(jj)%<37>
case1
case2
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);
case3
[ym,km]=max(y);
ifkm
line(zeta,t(km),ym,'marker','.','markeredgecolor','k','markersize',5);
end
case4
ii=max(find(abs(y-1)>0.05));
ifii line(zeta,t(ii+1),y(ii+1),'Color','r','Marker','o','MarkerSize',5) end end end xlabel('{\zeta}') ylabel('t') zlabel('y') alpha(0.7) view(75,44) (12)用户界面的运行 图9.2-13显示列表框全部选项的界面示例 102多指令输入的演示界面 【例9.2-2】制作一个用户界面,该界面启动后的初始状态如图9.2-14所示。 界面上的图形,由可编辑框中输入的指令生成。 本例目的: 演示可编辑框的“多行字符输入”使用法;演示弹出框的“选项行字符”使用法;演示检录框、切换键、按键的使用方法。 图9.2-14题目要求的用户界面初始态 (1)在GUIDE中进行界面配置 图9.2-15在GUIDE上进行界面设计 (2)界面执行文件的完整化 functionexm090202_OpeningFcn(hObject,eventdata,handles,varargin) %U_Start-------------------------------------------U_Start cla CH=get(handles.edit1,'String');%<4> Nch=size(CH,1); forn=1: Nch eval(CH{n});%<7> % end%<9> ic=get(handles.popupmenu1,'Value');%<10> clm=get(handles.popupmenu1,'String');%<11> colormap(clm{ic})%<12> set(handles.togglebutton1,'Value',1) set(handles.togglebutton1,'String','Axisoff') %U_End---------------------------------------------U_End handles.output=hObject; guidata(hObject,handles); functionedit1_Callback(hObject,eventdata,handles) %U_Start-------------------------------------------U_Start CH=get(hObject,'String');%<3> Nch=size(CH,1);%<4> forn=1: Nch eval(CH{n});%<6> end %U_End---------------------------------------------U_End functionpopupmenu1_Callback(hObject,eventdata,handles) %U_Start-------------------------------------------U_Start ic=get(hObject,'Value');%<3> clm=get(hObject,'String');%<4> colormap(clm{ic})%<5> %U_End---------------------------------------------U_End functioncheckbox1_Callback(hObject,eventdata,handles) %U_Start-------------------------------------------U_Start ifget(hObject,'Value') gridon else gridoff end %U_End---------------------------------------------U_End functioncheckbox2_Callback(hObject,eventdata,handles) %U_Start-------------------------------------------U_Start ifget(hObject,'Value') boxon else boxoff end %U_End---------------------------------------------U_End functiontogglebutton1_Callback(hObject,eventdata,handles) %U_Start-------------------------------------------U_Start VTB=get(hObject,'Value');%<3> ifVTB%<4> axisoff set(hObject,'String','Axison') set(handles.checkbox1,'Enable','off') set(handles.checkbox2,'Enable','off') else%<7> axison set(hObject,'String','Axisoff') set(handles.checkbox1,'Enable','on') set(handles.checkbox2,'Enable','on') end %U_End---------------------------------------------U_End ●按键回调子函数 functionpushbutton1_Callback(hObject,eventdata,handles) %U_Start-------------------------------------------U_Start close(handles.figure1) %U_End---------------------------------------------U_End (3)完成界面的创建 .2.4界面菜单和工具图标的创建 101标准菜单条和工具条的配置 【例9.2-3】在例9.2-1产生的界面上,配置MATLAB标准图形窗菜单,并对曲面上的特征点轨迹给以注释,如图9.2-16。 本例演示: 如何利用已有界面制作新界面;通过对界面窗“MenuBar”和“ToolBar”属性的设置,产生标准菜单条和工具条;“静态文本框”内容的动态变化。 图9.2-16带标准菜单和文字注释的图形用户界面 (1)利用已有界面制作新界面 (2)利用属性编辑器为界面配置标准菜单条和工具条 (3)按本题要求修改原界面 (4)修改exm090203.m文件 functionedit1_Callback(hObject,eventdata,handles) %hObject %eventdatareserved-tobedefinedinafutureversionofMATLAB %handles %U_Start-----------------------------------------------------U_Start listindex=get(handles.listbox1,'value'); sz=get(hObject,'String');%<6> zeta=str2double(sz);%<7> set(handles.slider1,'Value',zeta) handles.zeta=zeta;%<9> handles=surfplot(handles); guidata(hObject,handles);%<11> %U_End-------------------------------------------------------U_End 表9.2-13surfplot子函数修改前后的对照 原surfplot子函数的最后五条指令 xlabel('{\zeta}') ylabel('t') zlabel('y') alpha(0.7) view(75,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ch09 图形 用户界面 GUI