版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第九讲 MATLAB 图形用户界面设计,设计原则和一般步骤 图形用户界面设计工具介绍 用户控件的制作 用户菜单的制作 回调函数 M函数文件实现图形用户界面 实验一:计算器程序,2020/7/15,3,9.1设计原则和一般步骤,1)分析界面所要实现的主要功能,明确设计任务。 2)绘界面草图,注意从使用者的角度来考虑界面布局。 3)利用GUI设计工具制作静态界面。 4)编写动态功能程序。 注意: 1)先完成大致界面布局,再编写功能程序。 2)界面风格要一致,且符合使用习惯。例如,一般习惯图形区在上面或左面,控制区在下面或右面等等。,2020/7/15,4,例如,以本次试验的内容“计算器”为例。 1
2、)功能分析:完成数字的四则运算,以及一部分常用的科学计算:sin, cos, log等等。 2)界面草图:可以有多种风格的界面。给出几种设计草图。 草图一草图二草图三 3)利用GUI设计工具实现草图的布局,caculator.fig。 4)编写相应的程序完成计算器的各项功能, caculator.m。,2020/7/15,5,9.2 图形用户界面设计工具介绍,MATLAB6.5版本的GUI设计工具较前面的版本有很大的改善,设计界面变化很大。 打开GUI设计工作台的命令: guide%打开设计工作台启动界面 guide file%在工作台中打开文件名为file的用户界面 菜单项 File:New
3、-GUI %打开设计工作台启动界面 注意:guide命令中文件名不区分大小写。 打开的GUI启动界面提供新建界面( Create New GUI )或打开已有界面文件( Open Existing GUI )的属性页。新建界面可以选择空白界面、包含有控件的模板界面、包含有轴对象和菜单的模板界面、标准询问窗口等选项。 选择任意一项都会打开GUI设计工作台,对界面静态组成部分进行的具体的修改都在工作台实现。,2020/7/15,6,GUI设计工具的启动界面,2020/7/15,7,GUI设计工作台,设计工作区,主要由4个功能区,六个实用工具组成,菜单条,2020/7/15,8,9.3 用户控件的制
4、作,用户控件列表:,对象选择按钮,用来选取工作区上分布的控件。 单功能按键,按下操作代表一定的功能实现。 双位按键,代表“开”“关”两种状态。 互斥选择按钮,多个选项互斥选择时使用。 互容选择按钮,同时选中多个选项时使用。 编辑文本框,可以自由输入字符,编辑字符串 静态文本框,用于显示注释说明用文字,不可编辑。 滑动块,利用游标滑动,可以获取不同的值。 控件区域框,用于对控件区域进行标识。 列表框,提供多个可供选择的选项,可以互容选择。 弹出框,带有多个选项,只能选择其中一项。 轴对象,用来显示图形。,2020/7/15,9,以“计算器”界面草图一为例。 1. 初步布局,根据草图将控件选择区的
5、相应控件拖拉到设计工作区的相应位置。,2020/7/15,10,2. 修改控件属性,每一个控件都不可能是完全符合界面设计要求的,需要对其属性进行设置,以获得所需的界面显示效果。,可以通过双击该控件,或利用GUI设计工具的下拉菜单View: Property Inspector打开控件属性对话框。属性对话框具有良好的交互界面,以列表的形式给出该控件的每一项属性。 例如右图是“+”按钮的属性列表。,2020/7/15,11,下面对各控件的主要属性进行一下说明。 1)双击设计工作区的空白部分,打开整个图形窗的属性框。 MunuBar: none%图形窗是否使用标准菜单 Name: caculator
6、%图形窗名称 Resize: off%图形窗不能缩放 Tag: mainWnd%图形窗的句柄 handles.mainWnd 2) 静态文本编辑框的属性设置。 FontSize: 15%字体大小 FontUnits: points%字体大小的度量单位 HorizontalAlignment: Center%对齐方式 String: Expression%待显示的字符 Tag: text1%该静态文本框的句柄handles.text1 Units: points%文本框度量单位,Units或FontUnits可选择:inches(英寸),centimeters (厘米), normalized(
7、按比例缩放),points(点阵), pixels (像素), characters(字符)。如果选择normalized,那么当resize设为on时,控件或字体大小随着整个窗口的缩放而改变。 水平对齐方式 HorizontalAlignment可以是left, center, right。 控件句柄Tag有默认值,建议修改为带有具体含义的字符串,以增加程序可读性和方便回调函数调用。,2020/7/15,12,3)可编辑文本框的属性设置。 String: 0%初始状态下显示数字0 Tag: pExp%可编辑文本框的句柄 其它和静态文本框相同 4)单功能按钮属性设置。以按钮“1” 为例 Str
8、ing: 1 Tag: p1 其它和静态文本框相同。 3. 精细调整 利用对齐工具,排列控件的位置,使控件的大小、位置更加协调。,2020/7/15,13,4. 界面激活 保存静态界面后,利用工具栏上的运行按钮激活该界面。激活后可以看到两个同名文件:caculator.m和caculator.fig。 caculator.m文件在M文本编辑器中打开, caculator.fig文件显示为操作界面,但是无法实现任何功能,需要编写回调函数。,2020/7/15,14,9.4 回调函数,在M文本编辑器中打开caculator.m文件,可以看到自动生成的回调函数,该函数的命名利用对象句柄进行区分,没有
9、任何执行语句。 回调函数:Tag_Callback(hObject, eventdata, handles),通过加入自己的处理语句,可以实现所需的功能。 其中:hObject是该控件的句柄;eventdata是备用参数,目前没有定义;handles是用户数据,本身是一个结构数组,存放了当前窗口的所有对象的句柄,包括图形窗本身、所有控件和菜单的句柄。并且可以增加一些域用来传递用户数据。 利用guidata( H, handles )可以更新 H 的用户数据。,2020/7/15,15,先设5个参数 handles.start=1; %不能一开始输入运算符号 handles.term=0; %运
10、算完,进行新的运算 handles.repeat=0; %不能重复输入运算符号 handles.point=0; %不能重复输入点 handles.bracket=0; %输入sin,cos,log,log10后不能在输入数字,只能输入运算符号,2020/7/15,16,只用编0的程序来说明,其他从1到9都是一样的程序,function pushbutton0_Callback(hObject, eventdata, handles) % hObject handle to pushbutton0 (see GCBO) % eventdata reserved - to be defined
11、in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) if(handles.start) %如果没有数字按入,一开始运算符号无法输入 content=; set(handles.edit,string,content); %把空的内容显示出来 handles.start=0; guidata(hObject, handles); %更新句柄结构 end content=get(handles.edit,string); %把前面输入的内容保存在content中 if(
12、handles.term) %计算结束后,就为空,继续下一次输入 content=; handles.term=0; guidata(hObject, handles); end if(handles.bracket) %sin,cos,log,log10输入后,不能在接数字,只能接运算符号 guidata(hObject, handles); else out=content,0; %把0与前面的内容相连起来 set(handles.edit,string,out); %把新内容显示出来 handles.repeat=0; %数字输入完可以输入运算符号了 guidata(hObject, h
13、andles); end % - Executes on button press in pushbutton1.,2020/7/15,17,其他从1到9都是一样的程序 function pushbutton10_Callback(hObject, eventdata, handles),2020/7/15,18,下面的程序是关于点的程序,if(handles.point) %不能连续输入点 guidata(hObject, handles); else handles.repeat=1; %输入点后不能在输入运算符号 if(handles.start) %如果没有数字按入,一开始运算符号无法
14、输入 content=; set(handles.edit,string,content); handles.start=0; guidata(hObject, handles); end,2020/7/15,19,content=get(handles.edit,string); if(handles.term) content=; handles.term=0; guidata(hObject, handles); end out=content,.; set(handles.edit,string,out); handles.repeat=1; handles.point=1; guid
15、ata(hObject, handles); end,2020/7/15,20,下面是关于加法的程序,function pushbutton11_Callback(hObject, eventdata, handles) if(handles.start) %如果没有数字按入,一开始运算符号无法输入 content=0.; set(handles.edit,string,content); guidata(hObject, handles); else content=get(handles.edit,string); %把前面的内容取出来保存在content中 handles.term=0;
16、 %可以进行运算,2020/7/15,21,handles.point=0; %可以输入点 handles.bracket=0; %运算符号后可以输入sin,cos,log ,log10 if(handles.repeat) %前面有运算符号,就不允许在输入运算符号 guidata(hObject, handles); else out=content,+; set(handles.edit,string,out); handles.repeat=1; %输入加号后就把handles.repeat置1 guidata(hObject, handles); end end,2020/7/15,2
17、2,下面是关于减法的程序,if(handles.start) content=; set(handles.edit,string,content); handles.start=0; guidata(hObject, handles); end content=get(handles.edit,string); handles.term=0; handles.bracket=0;,2020/7/15,23,要注意reset后可以直接输入“”,因为有负数,if(handles.repeat) guidata(hObject, handles); else out=content,-; set(h
18、andles.edit,string,out); handles.repeat=1; guidata(hObject, handles); end,2020/7/15,24,下面是关于sin的程序,if(handles.start) content=0.; set(handles.edit,string,content); guidata(hObject, handles); else content=get(handles.edit,string);,2020/7/15,25,text=strcat(sin(, content,); %把sin()写显示出来括号里是前面输入的内容 set(h
19、andles.edit,string,text); %把内容显示出来 handles.point=1; %sin后不能在允许在输入点 handles.bracket=1; %sin()后不能直接跟数字 guidata(hObject, handles); end,2020/7/15,26,下面是关于计算的程序,if(handles.start) content=0.; set(handles.edit,string,content); guidata(hObject, handles); else,2020/7/15,27,try %把显示的内容进行计算,把结果显示出来,如果出现计算错误,则不
20、显示 content=get(handles.edit,string); result=eval(content); %对字符型表达式进行计算 set(handles.edit,string,num2str(result); handles.term=1; handles.point=0; guidata(hObject, handles); catch guidata(hObject, handles); end end,2020/7/15,28,下面是关于reset的程序,content=0.; set(handles.edit,string,content); handles.start
21、=1; handles.term=0; handles.repeat=0; handles.point=0; handles.bracket=0; guidata(hObject, handles);,2020/7/15,29,9.5 M函数文件实现图形用户界面 exm05_1.m,1. 用户控件制作函数: H=uicontrol( H_parent,style,Sv, pName, pVariable,) H为该控件的句柄,H_parent为控件父句柄,Sv为控件类型 pName和pVariable为一对值,用来确定控件的一个属性。 例如: H0=caculator; H1=uicontro
22、l(H0,style,text,. horizontalalignment,left,. position,0.65,0.05,0.8,0.05,. units,normalized,. string,Design by minnow); 轴对象直接利用axes命令生成: H1=axes(position,0.1, 0.1, 0.5, 0.5),pushbutton togglebutton radiobutton checkbox edit text slider frame listbox popupmenu,Position四个参数的含义: x_begin, y_begin, x_lenth, y_lenth,2020/7/15,30,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 失败容忍2026年合同管理评估协议
- 股东权益变动及公司治理协议
- 线上线下金融产品销售合同
- 互联网数据保护合规咨询合同2026
- 水上乐园游客安全管理协议
- 自动驾驶系统开发合同协议2026年
- 2026年排列与组合练测试题及答案
- 2026年语文诗词测试题及答案
- 2026年冯媛客孟尝君测试题及答案
- 2026年八型人格测试题及答案
- 保险消保工作汇报
- 中国农业大学《电子电路基础》2023-2024学年第一学期期末试卷
- 医院科研诚信培训课件
- DB5107∕T 059-2018 莴笋周年绿色高效生产技术规范
- 企事业单位住房指标转让合同范本
- DB11-T 1014-2021 液氨使用与储存安全技术规范
- 知识点2、化学式和化合价-2022年浙江省中考科学一轮复习化学部分
- 建筑公司商务部岗位职责
- T 3034-2022化工过程安全管理导则知识培训
- DB13-T 5871-2023 矿山地质环境恢复治理工程资料管理规程
- 《数值分析简明教程》讲义
评论
0/150
提交评论